Main Content

自适应线性预测

此示例说明自适应线性层如何学习在给定当前值和最后四个值的情况下,预测信号中的下一个值。

要了解如何使用深度学习网络预测时间序列数据,请参阅使用深度学习进行时间序列预测

定义波形

此处,两个时间段定义为 0 到 6 秒,步长为 1/40 秒。

time1 = 0:0.025:4;      % from 0 to 4 seconds
time2 = 4.025:0.025:6;  % from 4 to 6 seconds
time = [time1 time2];  % from 0 to 6 seconds

以下信号从一个频率开始,然后转换到另一个频率。

signal = [sin(time1*4*pi) sin(time2*8*pi)];
plot(time,signal)
xlabel('Time');
ylabel('Signal');
title('Signal to be Predicted');

为神经网络设置问题

然后将信号转换为元胞数组。神经网络将时间步表示为一个元胞数组的各列,以将它们与在给定时间的不同样本区分开来,后者用矩阵列表示。

signal = con2seq(signal);

为了设置此问题,我们将使用信号的前五个值作为初始输入延迟状态,其余的值作为输入。

Xi = signal(1:5);
X = signal(6:end);
timex = time(6:end);

目标现在定义为匹配输入。网络仅使用最后五个值来预测当前输入。

T = signal(6:end);

创建线性层

函数 linearlayer 创建一个线性层,该层由一个神经元组成,最后五个输入具有抽头延迟。

net = linearlayer(1:5,0.1);
view(net)

自适应线性层

函数 adapt 在输入端对网络进行仿真,同时在每个时间步后调整其权重和偏置,以反映其输出与目标的匹配程度。它返回更新网络、其输出及错误。

[net,Y] = adapt(net,X,T,Xi);

绘制输出信号与目标。

figure
plot(timex,cell2mat(Y),timex,cell2mat(T),'+')
xlabel('Time');
ylabel('Output -  Target +');
title('Output and Target Signals');

还可以绘制误差。

figure
E = cell2mat(T)-cell2mat(Y);
plot(timex,E,'r')
hold off
xlabel('Time');
ylabel('Error');
title('Error Signal');

请注意除初始误差之外的误差有多小,而且网络会在系统转换开始时和转换后学习系统行为。

此示例说明如何对自适应线性网络进行仿真,该网络可以根据当前值和过去的值预测信号的下一个值,而不管信号行为如何变化。