×

机器学习模型 | 长短期记忆网络(Long Short-Term Memory,LSTM)MATLAB时序预测实现

hqy hqy 发表于2025-04-12 00:39:33 浏览14 评论0百度已收录

抢沙发发表评论

长短期记忆网络(Long Short-Term Memory,LSTM)是一种特殊的循环神经网络(RNN),主要用于处理和预测序列数据,在自然语言处理、语音识别、时间序列预测等领域有广泛应用。

时序数据处理

对于回归问题,一个样本对应的是一个输出值;对于分类问题来说,可能多个样本对应同一个分类标签;对于时序数据问题来说,可以看出是一个列向量,例如股票价格预测,我们希望从以往时间的数据来预测后面的数据。

因此,对于LSTM模型时序预测问题的建模关键是对预测的一维时序数据的处理。

有关如何根据时序数据构造LSTM模型训练集和测试集的输入数据和输出数据的例子参考:

搞清楚时序数据转换成矩阵的操作之后,基于LSTM的时序预测问题就不难理解了。

MATLAB实现代码

%%  清空环境变量clear                   % 清空变量clc                     % 清空命令行warning off             % 关闭报警信息close all               % 关闭开启的图窗%%  导入数据(时间序列的单列数据)result = xlsread(数据集.xlsx);%%  数据分析num_samples = length(result);  % 样本个数 kim = 15;                      % 延时步长(kim个历史数据作为自变量)zim =  1;                      % 跨zim个时间点进行预测%%  划分数据集for i = 1: num_samples - kim - zim + 1    res(i, :) = [reshape(result(i: i + kim - 1), 1, kim), result(i + kim + zim - 1)];end%%  划分训练集和测试集temp = 1: 1: 922;P_train = res(temp(1: 700), 1: 15);T_train = res(temp(1: 700), 16);M = size(P_train, 2);P_test = res(temp(701: end), 1: 15);T_test = res(temp(701: end), 16);N = size(P_test, 2);%%  数据归一化[P_train, ps_input] = mapminmax(P_train, 0, 1);P_test = mapminmax(apply, P_test, ps_input);[t_train, ps_output] = mapminmax(T_train, 0, 1);t_test = mapminmax(apply, T_test, ps_output);%%  数据平铺% 将数据平铺成1维数据只是一种处理方式% 也可以平铺成2维数据,以及3维数据,需要修改对应模型结构% 但是应该始终和输入层数据结构保持一致P_train =  double(reshape(P_train, 15, 1, 1, M));P_test  =  double(reshape(P_test , 15, 1, 1, N));t_train = t_train;t_test  = t_test ;%%  数据格式转换for i = 1 : M    p_train{i, 1} = P_train(:, :, 1, i);endfor i = 1 : N    p_test{i, 1}  = P_test( :, :, 1, i);end%%  创建模型layers = [    sequenceInputLayer(15)              % 建立输入层    lstmLayer(10, OutputModelast) % LSTM层    reluLayer                           % Relu激活层    fullyConnectedLayer(1)              % 全连接层    regressionLayer];                   % 回归层%%  参数设置options = trainingOptions(adam, ...       % Adam 梯度下降算法MaxEpochs, 1200, ...                  % 最大训练次数InitialLearnRate, 5e-3, ...           % 初始学习率LearnRateSchedulepiecewise, ...   % 学习率下降LearnRateDropFactor, 0.1, ...         % 学习率下降因子LearnRateDropPeriod, 800, ...         % 经过 800 次训练后 学习率为 0.005 * 0.1Shuffleevery-epoch, ...           % 每次训练打乱数据集Plotstraining-progress, ...       % 画出曲线Verbosefalse);%%  训练模型net = trainNetwork(p_train, t_train, layers, options);%%  仿真预测t_sim1 = predict(net, p_train);t_sim2 = predict(net, p_test );%%  数据反归一化T_sim1 = mapminmax(reverse, t_sim1, ps_output);T_sim2 = mapminmax(reverse, t_sim2, ps_output);%%  均方根误差error1 = sqrt(sum((T_sim1 - T_train).^2) ./ M);error2 = sqrt(sum((T_sim2 - T_test ).^2) ./ N);%%  查看网络结构analyzeNetwork(net)%%  绘图figureplot(1: M, T_train, r-, 1: M, T_sim1, b-LineWidth, 1)legend(真实值预测值)xlabel(预测样本)ylabel(预测结果)string = {训练集预测结果对比; [RMSE= num2str(error1)]};title(string)xlim([1, M])gridfigureplot(1: N, T_test, r-, 1: N, T_sim2, b-LineWidth, 1)legend(真实值预测值)xlabel(预测样本)ylabel(预测结果)string = {测试集预测结果对比; [RMSE= num2str(error2)]};title(string)xlim([1, N])grid%%  相关指标计算% R2R1 = 1 - norm(T_train - T_sim1)^2 / norm(T_train - mean(T_train))^2;R2 = 1 - norm(T_test  - T_sim2)^2 / norm(T_test  - mean(T_test ))^2;disp([训练集数据的R2为:, num2str(R1)])disp([测试集数据的R2为:, num2str(R2)])% MAEmae1 = sum(abs(T_sim1 - T_train)) ./ M ;mae2 = sum(abs(T_sim2 - T_test )) ./ N ;disp([训练集数据的MAE为:, num2str(mae1)])disp([测试集数据的MAE为:, num2str(mae2)])% MBEmbe1 = sum(T_sim1 - T_train) ./ M ;mbe2 = sum(T_sim2 - T_test ) ./ N ;disp([训练集数据的MBE为:, num2str(mbe1)])disp([测试集数据的MBE为:, num2str(mbe2)])%%  绘制散点图sz = 25;c = b;figurescatter(T_train, T_sim1, sz, c)hold onplot(xlim, ylim, --k)xlabel(训练集真实值);ylabel(训练集预测值);xlim([min(T_train) max(T_train)])ylim([min(T_sim1) max(T_sim1)])title(训练集预测值 vs. 训练集真实值)figurescatter(T_test, T_sim2, sz, c)hold onplot(xlim, ylim, --k)xlabel(测试集真实值);ylabel(测试集预测值);xlim([min(T_test) max(T_test)])ylim([min(T_sim2) max(T_sim2)])title(测试集预测值 vs. 测试集真实值)

结果展示

训练集数据的R2为:0.99247测试集数据的R2为:0.9666训练集数据的MAE为:0.0062985测试集数据的MAE为:0.007317训练集数据的MBE为:0.00032334测试集数据的MBE为:0.00034658

往期回顾

回归预测问题:

01. 机器学习模型 | BP神经网络原理及MATLAB回归实现

02. 机器学习模型 | 径向基函数神经网络(RBFNN)原理及MATLAB回归实现

03. 机器学习模型 | 随机森林(Random Forest)原理及MATLAB回归实现

04. 机器学习模型 | 长短期记忆网络(Long Short-Term Memory,LSTM)原理及MATLAB回归实现

分类预测问题:

01. 机器学习模型 | BP神经网络MATLAB分类预测实现

02. 机器学习模型 | 径向基函数神经网络(RBFNN)MATLAB分类预测实现

03. 机器学习模型 | 随机森林(Random Forest)MATLAB分类预测实现

04. 机器学习模型 | 长短期记忆网络(Long Short-Term Memory,LSTM)MATLAB分类预测实现

时序预测问题:

01. 机器学习模型 | BP神经网络MATLAB时序预测实现

02. 机器学习模型 | 径向基函数神经网络(RBFNN)MATLAB时序预测实现

03. 机器学习模型 | 随机森林(Random Forest)MATLAB时序预测实现