时间序列 - 朴素方法
简介
朴素方法,例如假设 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’] 或考虑在使用其他语法之前重命名此列。
广告