时间序列预测问题中特征工程和训练的经验小结

        鉴于图像的语义分析需求已经不再局限于常规的单帧图像,视频语义分析的地位日渐重要。初步考虑,帧与帧之间依靠时间维度进行衔接,或许需要适当研究基础的LSTM与RNN结构。


特征工程/训练:

        许多大数据工程师都认为,预测任务中80%的时间用来做特征工程,20%的时间用来做训练。这里总结一下自己最近作比赛四处讨教来的、针对时间序列预测问题而出现的特征工程技巧和训练技巧,不定时更新补充:


假设场景:

    公司给出了这样的数据:以天为单位;每天有N维特征;一共是最近1000天的数据

项目要求:

    预测往后20天的数据。


一:该怎么做比例合适的测试集和训练集?

  1.  对于非平稳序列,通过差分预处理获得平稳时间序列。
  2.  按照时间先后顺序(有头有尾);以【1】天为步长,依次把第【J】天的数据做为X,把第【J+1】天的数据做为Y,形成一个embedding;那么有999个embedding。
  3. 按照时间先后顺序(有头有尾);以【m】天为步长,依次把【(J*m:J*m+N】天拓展数据做为X,把第【J*m+N+1】天作为Y,进行大跨度切片,形成一个embedding;那么有(1000-N)% m 个embedding。
  4. 把时间序列首尾相连形成循环队列状(无头无尾),按照2的规则进行切片。不同的是,有的切片会切到时间序列上收尾相接的部分。
  5. 在3或4的规则下,以适当小的比例打乱单个embedding的X内部元素的顺序,也添加到训练集中。
  6. 在3或3的规则下,协同过滤方法为训练集增加特征:去除样本中的时间维度,计算每个样本和其他样本之间的相似度,用相似度乘以其他样本的【某一个维度A】进行加权平均,得到纯基于特征相似度的【A】特征,加入到样本特征中。
  7. 在5规则下,各种组合。
  8. 去除异常点(四种方法,先mark)

二:该怎么安排训练过程?

  1. 完全按照时间序列的前后顺序进行训练,更新rnn的隐藏层输出值,这是利用网络之前的输出会影响之后的输入的特性
  2. 不完全按照时间序列的前后顺序进行训练,而是打乱shuffle顺序或者随机抽取测试样本进行训练,kaggle竞赛有些是这么处理的(这个过程有点粗暴,相当于用着lstm/rnn网络,却丢掉了时间维度,只是做着传统cnn的特征提取工作。所以我写了“不完全按照时间序列”,这样处理可以泛化除时间维度之外的特征提取能力,同时在数据量小的情况下也可以增加样本,适当地防止过拟合,算是个小窍门),预测准确性获得提升。

wonderseen | Xiamen University | 2018.03.17



你可能感兴趣的:(回归预测)