(N=90) 使用神经网络进行点前预测:
我试图预测提前 3 分钟,即提前 180 分。因为我将时间序列数据压缩为每 2 个点的平均值为 1,所以我必须预测 (N=90) 超前预测。
我的时间序列数据以秒为单位。数值在 30-90 之间。它们通常从 30 移动到 90 和从 90 移动到 30,如下例所示。
我的数据可以来自:https ://www.dropbox.com/s/uq4uix8067ti4i3/17HourTrace.mat
我在实现神经网络来预测 N 个点时遇到了麻烦。我唯一的特点是以前。我使用了 elman 循环神经网络和 newff。
在我的场景中,我需要提前预测 90 个点。首先,我如何手动分离输入数据和目标数据:例如:
data_in = [1,2,3,4,5,6,7,8,9,10]; //imagine 1:10 only defines the array index values.
N = 90; %predicted second ahead.
P(:, :) T(:) it could also be(2 theta time) P(:, :) T(:)
[1,2,3,4,5] [5+N] | [1,3,5,7,9] [9+N]
[2,3,4,5,6] [6+N] | [2,4,6,8,10] [10+N]
...
直到它到达数据的末尾
我在 Elman 循环神经网络中有 100 个输入点和 90 个输出点。什么是最有效的隐藏节点大小?
input_layer_size = 90;
NodeNum1 =90;
net = newelm(threshold,[NodeNum1 ,prediction_ahead],{'tansig', 'purelin'});
net.trainParam.lr = 0.1;
net.trainParam.goal = 1e-3;
//在我的训练开始时,我用卡尔曼过滤它,归一化到[0,1]的范围内,然后我打乱了数据。1)我将无法训练我的完整数据。首先,我尝试训练完整的 M 数据,大约 900,000,这并没有给我一个解决方案。
2)其次,我尝试迭代训练。但是在每次迭代中,新添加的数据都会与已经训练过的数据合并。在 20,000 个训练数据之后,准确性开始下降。首先训练的 1000 个数据完全适合训练。但是当我开始迭代合并新数据并继续训练后,训练准确率下降得非常快,从 90 到 20。例如。
P = P_test(1:1000) T = T_test(1:1000) counter = 1;
while(1)
net = train(net,P,T, [], [] );%until it reaches to minimum error I train it.
[normTrainOutput] = sim(net,P, [], [] );
P = [ P P(counter*1000:counter*2000)]%iteratively new training portion of the data added.
counter = counter + 1; end
这种方法非常缓慢,过了一段时间它不会给出任何好的结果。
我的第三种方法是迭代训练。它与之前的训练类似,但在每次迭代中,我只训练数据的 1000 部分,而不与之前训练的数据进行任何合并。例如,当我训练前 1000 个数据时,直到它达到 >95% 的最小误差准确性。在它被训练之后,当我对数据的第二个 1000 部分做了同样的事情时;它会覆盖权重,并且预测器主要表现为数据的最新训练部分。
> P = P_test(1:1000) T = T_test(1:1000) counter = 1;
while(1)
> net = train(net,P,T, [], [] ); % I did also use adapt()
> [normTrainOutput] = sim(net,P, [], [] );
>
> P = [ P(counter*1000:counter*2000)]%iteratively only 1000 portion of the data is added.
> counter = counter + 1;
end
训练数据:此图是我训练过的训练集的快照,蓝线是原始时间序列,红线是经过训练的神经网络的预测值。MSE 在 50 左右。
测试数据:在下图中,您可以看到我使用神经网络对测试数据的预测,该网络使用 20,000 个输入点进行训练,同时保持训练数据集的 MSE 误差 <50。它能够捕捉到很少的模式,但大多数情况下我并没有给出真正好的准确性。
我无法成功使用任何这种方法。在每次迭代中,我还观察到 alpha 的微小变化会完全覆盖已经训练的数据,并且更多地关注当前训练的数据部分。我无法想出解决这个问题的办法。在迭代训练中,我应该保持较小的学习率和尽可能少的时期数。
而且我找不到一种有效的方法来预测时间序列中提前 90 个点。任何关于我应该做什么以预测 N 点的建议,任何教程或信息链接。
迭代训练的最佳方式是什么?在我的第二种方法中,当我达到 15000 个训练数据时,训练规模突然开始下降。我应该迭代地更改运行时的 alpha 吗?
==========
任何建议或我做错的事情将不胜感激。
我还实现了循环神经网络。但是在大数据的训练中,我遇到了同样的问题。是否可以在循环神经网络中为(newelm)进行自适应学习(在线学习)?重量不会自行更新,我没有看到任何改善。
如果是,怎么可能,我应该使用哪些功能?
net = newelm(threshold,[6, 8, 90],{'tansig','tansig', 'purelin'});
net.trainFcn = 'trains';
batch_size = 10;
while(1)
net = train(net,Pt(:, k:k+batch_size ) , Tt(:, k:k+batch_size) );
end