時間序列 - 樸素方法
簡介
樸素方法,例如假設 t 時刻的預測值為 t-1 時刻變數的實際值,或時間序列的滾動平均值,用於衡量統計模型和機器學習模型的效能,並強調其必要性。
在本節中,讓我們嘗試將這些模型應用於時間序列資料的一個特徵。
首先,我們將檢視資料中“溫度”特徵的平均值及其偏差。檢視最高和最低溫度值也很有用。我們在這裡可以使用 numpy 庫的功能。
顯示統計資料
In [135]
import numpy print ( 'Mean: ',numpy.mean(df['T']), '; Standard Deviation: ',numpy.std(df['T']),'; \nMaximum Temperature: ',max(df['T']),'; Minimum Temperature: ',min(df['T']) )
我們獲得了跨等間距時間線的全部 9357 個觀測值的統計資料,這些資料有助於我們理解資料。
現在我們將嘗試第一個樸素方法,將當前時間的預測值設定為前一時間段的實際值,並計算其均方根誤差 (RMSE) 以量化該方法的效能。
顯示第一個樸素方法
In [136]
df['T'] df['T_t-1'] = df['T'].shift(1)
In [137]
df_naive = df[['T','T_t-1']][1:]
In [138]
from sklearn import metrics
from math import sqrt
true = df_naive['T']
prediction = df_naive['T_t-1']
error = sqrt(metrics.mean_squared_error(true,prediction))
print ('RMSE for Naive Method 1: ', error)
樸素方法 1 的 RMSE:12.901140576492974
讓我們看看下一個樸素方法,其中當前時間的預測值等於其前面時間段的平均值。我們也將計算此方法的 RMSE。
顯示第二個樸素方法
In [139]
df['T_rm'] = df['T'].rolling(3).mean().shift(1) df_naive = df[['T','T_rm']].dropna()
In [140]
true = df_naive['T']
prediction = df_naive['T_rm']
error = sqrt(metrics.mean_squared_error(true,prediction))
print ('RMSE for Naive Method 2: ', error)
樸素方法 2 的 RMSE:14.957633272839242
在這裡,您可以嘗試使用各種數量的前一時間段,也稱為“滯後”(此處設定為 3)。在這個資料集中可以看出,隨著滯後數量的增加,誤差也會增加。如果滯後設定為 1,則它與前面使用的樸素方法相同。
注意事項
您可以編寫一個非常簡單的函式來計算均方根誤差。在這裡,我們使用了 “sklearn” 包中的均方誤差函式,然後取其平方根。
在 pandas 中,df[‘column_name’] 也可以寫成 df.column_name,但是對於這個資料集,df.T 的作用與 df[‘T’] 不同,因為 df.T 是用於轉置資料框的函式。因此,只使用 df[‘T’] 或考慮在使用其他語法之前重新命名此列。
廣告