Sktime:用于时间序列机器学习的Python库( 二 )
sktime应用程序接口
如上所述 , Sktime遵循基本的Scikit-learn应用程序接口以及拟合、预报和变换类方法 。 对于估计量(即模型)类 , Sktime提供了一个拟合方法用于模型训练 , 以及一个预报方法用于生成新的预测;Sktime中的估计量将Scikit-learn的回归器和分类器扩展到对应的时间序列;Sktime还包括特定于时间序列任务的新的估计器 。
本文插图
图源:unsplash
对于转换器类 , sktime提供了拟合和转换方法来转换系列数据 。 有几种可用的类型转换:
· 表格式数据转换器 , 例如PCA , 可以在独立同分布实例上操作 。
· 序列到基元转换器 , 将每一行的时间序列转换为基元数字(例如 , 特征事务) 。
· 序列到序列转换器将序列转换为不同的序列(如序列的傅里叶变换) 。
· 去趋势转换器返回与输入序列在同一域中的去趋势时间序列(例如去周期) 。
本文插图
代码示例
时间序列预测
下面的例子改编自Github上的预测教程 , 本例中的系列(博克思-詹金斯法航空数据集)显示了1949-1960年期间每月国际航空公司乘客的数量 。
首先 , 加载数据并将其分为训练集、测试集和图表 。 sktime提供了两个方便的函数来轻松完成此任务——temporal_train_test_splitfor按时间分割数据集 , plot_ys用于绘制训练和测试序列值 。
from sktime.datasets import load_airline fromsktime.forecasting.model_selection import temporal_train_test_split fromsktime.utils.plotting.forecasting import plot_ys y =load_airline() y_train,y_test =temporal_train_test_split(y) plot_ys(y_train,y_test, labels=[''y_train'', ''y_test''])
本文插图
在创建复杂的预测之前 , 将预测与一个简单的基线进行比较会很有帮助——一个好的模型必须超过这个值 。 sktime提供NaiveForecaster方法 , 采用不同的“策略”生成基线预测 。
下面的代码和图表展示了两个天真预测 。 strategy = '' last ''预测器会预测序列的最后观察值 。 strategy = '' seasonal_last ''预测器预测给定季节中观察到的序列最后一个值 。 本例中的周期指定为“sp=12” , 即12个月 。
from sktime.forecasting.naive importNaiveForecaster naive_forecaster_last =NaiveForecaster(strategy=''last'') naive_forecaster_last.fit(y_train) y_last=naive_forecaster_last.predict(fh) naive_forecaster_seasonal =NaiveForecaster(strategy=''seasonal_last'',sp=12) naive_forecaster_seasonal.fit(y_train) y_seasonal_last=naive_forecaster_seasonal.predict(fh) plot_ys(y_train,y_test, y_last, y_seasonal_last, labels=[''y_train'', ''y_test'', ''y_pred_last'', ''y_pred_seasonal_last'']); smape_loss(y_last, y_test) >>0.231957
本文插图
下一个预测片段显示了如何用最小的工作量轻松、正确地调整现有的sklearn回归器来完成预测任务 。 下方 , Sktime的ReducedRegressionForecaste方法使用sklearnRandomForestRegressor模型对序列进行预测 。 在内部 , Sktime将训练数据分割成长度为12的窗口 , 以便回归器进行训练 。
from sktime.forecasting.compose importReducedRegressionForecaster fromsklearn.ensemble importRandomForestRegressor fromsktime.forecasting.model_selection import temporal_train_test_split fromsktime.performance_metrics.forecasting import smape_loss regressor =RandomForestRegressor() forecaster=ReducedRegressionForecaster(regressor,window_length=12) forecaster.fit(y_train) y_pred= forecaster.predict(fh) plot_ys(y_train,y_test, y_pred, labels=['y_train', 'y_test', 'y_pred']) smape_loss(y_test, y_pred)
推荐阅读
- IT168|用于取代将下架的机型,4G版苹果12曝光
- 内分泌疾病|什么人不适合吃褪黑素
- 多国科学家强调:基因组编辑技术尚不能安全用于人类
- 科技日报|多国科学家强调:基因组编辑技术尚不能安全用于人类
- 中新网|多国科学家强调: 基因组编辑技术尚不能安全用于人类
- 小熊科技|为突破美国垄断,中国对外宣布:将加大半导体投资用于自研
- 扬子晚报|内外勾结!6亿多件“空包”快递单用于诈骗和刷单
- 新华社|多国科学家警告:基因组编辑技术还不能安全用于人
- 争议|民间借贷利率再引争议,刘晓春:新规司法保护上限不适用于银行
- 保护|民间借贷利率再引争议,刘晓春:新规司法保护上限不适用于银行