双向LSTM在时间序列异常值检测的应用
最近在做时间序列异常值检测,除了常规的统计学算法以外,也想尝试通过机器学习或深度学习的方式去解决问题。 于是想,可不可以直接使用一个拟合效果非常棒的模型先去预测该时间序列的未来走势,再将预测后的值(predict_value)当前值(value)做对比,只要超过一定阈值就判定该值为异常值。 尝试了xgboost、ARIMA 和 LSTM 三者中,拟合效果最好的是LSTM,简单记录一下建模和调参过程。 1.加载数据:源数据结构如下,只要 y 值。 2.加载数据,由于我这里代表时间的字段是从piontStart里面拿出去,并且需要去掉最后'000'再用time.localtime()转换成时间戳,不是重点,简单看一下就行。 3.准备训练和测试数据 4.建模阶段 5.训练阶段 这里有我之前调参时的Train_Score 和 Test_Score 对比记录 可以看到,使用双层结构的 LSTM 有非常严重的过拟合现象发生,单层LSTM已经可以很好的对时间序列进行拟合 batch_size 的大小也会对模型的收敛产生不小的影响 look_back(即 time_step) 的大小会对过拟合的程度造成很大影响,如果步长取的太短也会造成过拟合