注意力机制atttention结合LSTM做时间序列单输入单输出预测模型,要求数据是单列的时间序列数据替换数据就可以用。 程序语言是matlab,需求最低版本为2021及以上。 程序可以出真实值和预测值对比图,线性拟合图,可打印多种评价指标。 PS:以下效果图为测试数据的效果图,主要目的是为了显示程序运行可以出的结果图,具体预测效果以个人的具体数据为准。 2.由于每个人的数据都是独一无二的,因此无法做到可以任何人的数据直接替换就可以得到自己满意的效果。 3.程序后无原理讲解。

在时间序列预测领域,Attention机制与LSTM的结合展现出了强大的性能。今天就来分享一个使用Matlab实现的,基于Attention结合LSTM的时间序列单输入单输出预测模型,此模型仅需单列的时间序列数据,替换数据就能使用,且Matlab最低版本要求为2021及以上。

数据准备

首先,我们需要准备单列的时间序列数据。假设我们的数据存储在一个.mat文件中,变量名为timeSeriesData

load('yourDataFile.mat');
data = timeSeriesData;

这里简单地通过load函数加载数据,并将其赋值给data变量。

划分数据集

为了训练和评估模型,我们需要划分数据集。一般会将数据分为训练集和测试集。

trainRatio = 0.8;
trainSize = floor(trainRatio * length(data));
trainData = data(1:trainSize);
testData = data(trainSize + 1:end);

上述代码中,trainRatio设定了训练集所占比例为80%,通过floor函数计算出训练集的大小,进而划分出训练集trainData和测试集testData

数据预处理

在送入模型之前,数据通常需要进行归一化处理。

[trainDataNorm,ps] = mapminmax(trainData,0,1);
testDataNorm = mapminmax('apply',testData,ps);

这里使用mapminmax函数对训练数据进行归一化,范围是0到1,并保存归一化参数ps,后续使用相同的参数对测试数据进行归一化。

构建Attention-LSTM模型

接下来就是构建核心的Attention-LSTM模型。

numFeatures = 1;
numHiddenUnits = 100;
numClasses = 1;

layers = [...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    attentionLayer(numHiddenUnits)
    fullyConnectedLayer(numClasses)
    regressionLayer];

在这段代码中,我们定义了模型的各层结构。sequenceInputLayer作为输入层,接收单特征的序列数据。lstmLayer设置了100个隐藏单元,并指定输出模式为最后一个时间步的输出。attentionLayer对LSTM的输出应用注意力机制。fullyConnectedLayer作为全连接层,最后regressionLayer作为回归层,用于输出预测值。

模型训练

定义好模型后,就可以进行训练了。

options = trainingOptions('adam',...
    'MaxEpochs',100,...
    'InitialLearnRate',0.001,...
    'GradientThreshold',1,...
    'ValidationData',{testDataNorm,testDataNorm},...
    'ValidationFrequency',10,...
    'Verbose',0,...
    'Plots','training-progress');

net = trainNetwork(trainDataNorm',trainDataNorm',layers,options);

这里使用trainingOptions设置训练选项,采用adam优化器,最大训练轮数为100,初始学习率为0.001等。然后使用trainNetwork函数进行模型训练。

模型预测

训练好模型后,就可以对测试数据进行预测。

predictedTestNorm = predict(net,testDataNorm');
predictedTest = mapminmax('reverse',predictedTestNorm,ps);

通过predict函数得到归一化后的预测值,再使用之前保存的归一化参数ps将预测值还原到原始尺度。

结果展示与评价

最后,我们来展示真实值和预测值对比图、线性拟合图,并打印多种评价指标。

figure;
subplot(2,1,1);
plot(testData,'b','LineWidth',1.5); hold on;
plot(predictedTest,'r--','LineWidth',1.5);
legend('真实值','预测值');
xlabel('时间步');
ylabel('数值');
title('真实值与预测值对比');

subplot(2,1,2);
scatter(testData,predictedTest);
p = polyfit(testData,predictedTest,1);
yfit = polyval(p,testData);
plot(testData,yfit,'r--','LineWidth',1.5);
xlabel('真实值');
ylabel('预测值');
title('线性拟合图');

% 计算评价指标
maeValue = mean(abs(testData - predictedTest));
mseValue = mean((testData - predictedTest).^2);
rmseValue = sqrt(mseValue);

fprintf('平均绝对误差(MAE): %.4f\n', maeValue);
fprintf('均方误差(MSE): %.4f\n', mseValue);
fprintf('均方根误差(RMSE): %.4f\n', rmseValue);

第一段绘图代码绘制了真实值和预测值的对比图,直观展示模型预测效果。第二段绘图代码绘制了线性拟合图,观察预测值与真实值的线性关系。最后计算并打印了平均绝对误差(MAE)、均方误差(MSE)和均方根误差(RMSE)这几个常用的评价指标。

注意力机制atttention结合LSTM做时间序列单输入单输出预测模型,要求数据是单列的时间序列数据替换数据就可以用。 程序语言是matlab,需求最低版本为2021及以上。 程序可以出真实值和预测值对比图,线性拟合图,可打印多种评价指标。 PS:以下效果图为测试数据的效果图,主要目的是为了显示程序运行可以出的结果图,具体预测效果以个人的具体数据为准。 2.由于每个人的数据都是独一无二的,因此无法做到可以任何人的数据直接替换就可以得到自己满意的效果。 3.程序后无原理讲解。

需要注意的是,由于每个人的数据都是独一无二的,因此无法做到任何人的数据直接替换就可以得到自己满意的效果,但按照上述步骤替换数据后可运行此模型进行预测分析。希望这个基于Attention和LSTM的时间序列预测模型能为大家在相关领域的研究和应用提供帮助。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐