原文:
Deep Learning for Time Series Modeling
CS 229 Final Project Report
线性回归可以看作特殊的退化的神经网络,他没有隐藏层
特征创建的过程是浪费的,因为多项式的展开并没有带来统计特性而且耗时
可以用子集选择的方法+扩展变量的方法来解决,但是只能在小的subsets上,而且可能会损失重要的训练信息
subset选择方法:
forward/backward stepwaise
lasso
在复杂计算下,为了尽可能的维护数据信息,本文实现了k-means聚类,运行算法直到收敛过分减缓
在用不同的cluster数目+运行朴素“nearest centroid”分类下,发现增加模型复杂度,结果会提升
发现当使用feature standerdization聚类过程更高效
feature standerdization = mean zero/unit variance ???
为了增加模型复杂度,用Kernal方法
本文实现了基于平方指数距离的kernelized local regression
当额外考虑每个cluster的点数,结果也会提升
Limitation:
计算开销大
kernalized回归400个cluster
NN能够在大数据集上增加复杂性
本文:
(1)实现了feedforward网络来探索模型参数
(2)用循环结构来推理,来提升预测准确度
过程
(1)通过k-flolds validation来选择参数,包含:
样本集size、feature engineering、异常过滤、训练算法、网络拓扑
此阶段考虑计算开销,只用了feedforward网络
(2)70%的数据用于训练、15%用于validation stopping、15%用于测试
(3)重复10次,计算平均样本误差
网络:
中型feedforward网络,2个隐藏层,分别包含30和10个神经元
用比例变换的训练数据集训练,检测学习曲线
问题:
虽然网络复杂,但是有高的bias
解决关注点:
develop新的特征+增加模型复杂度
特征的加入使得RMSE减小
可以比中型网络实现更多复杂性的model,会有更好的performace
为了探索data的强周期性(频率),本文试图用Modified Discrete Cosine Transforms,来预测其频率空间
设置时间窗口, l ,来拆分时间序列
被转换的数据集由样本 (x^(i),y^(i)) 构成
x^(i) ,是温度时间序列的第i个时间窗口的transform
y^(i) ,是power loads时间序列的第i个时间窗口的transform
本文:
网络拓扑:两层隐藏层
第一层:节点数和输入 x^(i) 的一样
第二层:节点数和输入 y^(i) 的一样
为了加速计算&减少过拟合风险,在 x^(i) 上应用PCA,降维
worked on the first 95% of the total variance ???
随着时间窗口的增加 ???
(1)减少数据集样本数
(2)增加样本的维度
模型的负责度增加,同时数据集变小
根据图Fig 5:
(1)sample数固定,随着窗口变大,RMSE一般会变大
(2)window固定,随着样本数增大,RMSE增大
(3)测试误差>训练误差
异常过滤可以减少NN的误差
本文:
用混合的高斯来估计最不可能的数据,标记为异常
在18维的特征空间,用10~100个多变量的高斯来拟合数据,将最小的可能性的数据(1%,5%,10%)标志为异常特征
NN在新的特征空间训练
但是没有明显改进generalization error
混合高斯可能无法标志异常数据
由于NN(特别是DNN)目标函数的非凸性,很难训练
本文:尝试了5种训练算法
Levenberg-Marquardt
BFGS Quasi-Newton
Bayesian Regulation
Scaled Conugate Gradient
Conjugate Gradient
LM算法:
Levenberg-Marquardt(结合了quasi-Newton+梯度下降算法),收敛最快、总是最好的error
纯Feedforward网络会忽视时间序列数据的时间结构
RNN可以解决此问题
RNN可能有多种类型的反馈loop
有两种为:input delay 和 feedback delay,两者通过给网络提供延迟的信息,伴随当前信息,实际上增加了输入的node数目
input delay:
输入特征的多个连续的时间步同时呈现在网络中
feedback delay:
模型的输出,伴随之前的data,作为输入
open loop:
输出作为输入
closed loop:
将网络的输出和输入直接连接
要预测的远,需要closed loop
但是会增加~10%的误差
网络的性能与隐藏层和层里的神经元个数有关