关于机器学习:时间序列中的特征选择在保持性能的同时加快预测速度

49次阅读

共计 2523 个字符,预计需要花费 7 分钟才能阅读完成。

当咱们对数据建模时,首先应该建设一个规范基线计划,而后再通过优化对该计划进行批改。在我的项目的第一局部中,咱们必须要投入工夫来了解业务需要并进行充沛的探索性剖析。建设一个原始模型。能够有助于了解数据,采纳适当的验证策略,或为引入奇异的想法提供数据的反对。

在这个初步阶段之后,咱们能够依据不同的状况抉择不同的优化形式,例如扭转模型,进行数据的解决,甚至是引入更多的内部数据。

对于每个计划,咱们都须要对数据进行解决,建模和验证,这都须要从头开始对模型进行再训练,这时就会节约很多的工夫,如果咱们能够通过一些简略而无效的技巧来进步预测的速度。例如,咱们都晓得特征选择是一种升高预测模型输出的特色维数的技术。特征选择是大多数机器学习管道中的一个重要步骤,次要用于进步性能。当缩小特色时,就是升高了模型的复杂性,从而升高了训练和验证的工夫。

在这篇文章中,咱们展现了特征选择在缩小预测推理工夫方面的有效性,同时防止了性能的显着降落。tspiral 是一个 Python 包,它提供了各种预测技术。并且它与 scikit-learn 能够完满的集成应用。

为了进行试验,咱们模仿了多个工夫序列,每个小时的频率和双季节性 (每日和每周)。此外咱们还退出了一个从一个平滑的随机游走中失去的趋势,这样就引入了一个随机的行为。

这个时序数据的最初一部分是用作测试应用的,咱们会记录其中测量预测误差和做出预测所需的工夫。对于这个试验模仿了 100 个独立的工夫序列。之所以说“独立”,是因为只管它们体现出十分类似的行为,但所有的系列并不互相关联。通过这种形式,咱们别离对它们进行建模。

咱们应用指标的滞后值作为输出来预测工夫序列。换句话说,为了预测下一个小时的值,咱们应用表格格局重新排列了以前可用的每小时观测值。这样工夫序列预测的特征选择就与规范的表格监督工作一样。这样特征选择的算法就能够简略地对滞后的指标特色进行操作。上面是一个应用递归预测进行特征选择的例子。

 from sklearn.linear_model import Ridge
 from sklearn.pipeline import make_pipeline
 from sklearn.feature_selection import SelectFromModel
 from tsprial.forecasting import ForecastingCascade
 
 max_lags = 72
 recursive_model = ForecastingCascade(
     make_pipeline(
         SelectFromModel(Ridge(), threshold='median',
             max_features=max_lags,
         ), 
         Ridge()),
     lags=range(1,169),
     use_exog=False
 )
 
 recursive_model.fit(None, y)
 
 selected_lags = recursive_model.estimator_['selectfrommodel'].get_support(indices=True)

咱们应用元预计器的重要性权重(线性模型的系数)从训练数据中抉择重要特色。这是一种简略而疾速的抉择特色的办法,因为咱们解决后的数据能够应用通常利用于表格回归工作的雷同技术来执行。

在间接预测的状况下,须要为每个预测步骤拟合一个独自的预计器。须要为每个预测步骤进行抉择。每个预计器会抉择不同的重要水平的滞后子集,并汇总后果生成一组独特的有意义的滞后。

 from sklearn.linear_model import Ridge
 from sklearn.pipeline import make_pipeline
 from sklearn.feature_selection import SelectFromModel
 from tsprial.forecasting import ForecastingChain
 
 max_lags = 72
 direct_model = ForecastingChain(
     make_pipeline(
         SelectFromModel(Ridge(), threshold='median',
         ), 
         Ridge()),
     n_estimators=168,
     lags=range(1,169),
     use_exog=False,
     n_jobs=-1
 )
 
 direct_model.fit(None, y)
 
 selected_lags = np.argsort(np.asarray([est.estimator_['selectfrommodel'].get_support() 
      for est in direct_model.estimators_
 ]).sum(0))[-max_lags:]

后果能够看到,滞后抉择与模型性能密切相关。在纯自回归的状况下,如果没有额定的外生变量,滞后目标值是提供良好预测的惟一有价值的信息。

这里采纳了三种递归和间接办法。首先,应用过来长达 168 小时的所有提早 (full)。而后,只应用周期性滞后(dummy)。最初只思考在训练数据上抉择的有意义的滞后(filtered)来拟合咱们的模型

能够看到最间接办法是最精确的。而 full 的办法比 dummy 的和 filter 的办法性能更好,在递归的办法中,full 和 filtered 的后果简直雷同。

对于工夫来说,dummy 办法是最快的办法,这个应该是预料之中的因为它思考的特色数量很少。出于同样的起因,filtered 要比 full 快。然而令人诧异的是,filtered 的速度是 full 办法的一半。这可能是一个很好的后果,因为咱们能够通过简略的特征选择以更快的形式取得良好的预测。

下面的测试后果和表格都是利用 tspiral 的来进行解决和生成的。它简化了有意义的自回归滞后的辨认,并赋予了应用工夫序列操作特征选择的可能性。最初咱们还通过这个试验发现了如何通过简略地利用适当的滞后抉择来缩小预测的推理工夫。

如果你对本文的后果感兴趣,请查看本文的源代码:

https://avoid.overfit.cn/post/7488218628c84fdb9423484a98bbfa3e

作者:Marco Cerliani

正文完
 0