首页 > 其他分享 >基于 MATLAB 的实战训练:长短期记忆网络(LSTM)模型来进行序列预测任务

基于 MATLAB 的实战训练:长短期记忆网络(LSTM)模型来进行序列预测任务

时间:2024-11-17 19:48:55浏览次数:3  
标签:YTest sequenceLength 训练 ... 模型 numTimeStepsTrain 长短期 MATLAB LSTM

目录

步骤概述

详细步骤

1. 加载数据集

2. 数据预处理

3. 定义网络结构

4. 设置训练选项

5. 训练模型

6. 测试模型

完整代码

数据集准备

运行代码

结果解释


基于 MATLAB 的大模型实例,我们将使用一个复杂的长短期记忆网络(LSTM)模型来进行序列预测任务。这个模型将用于预测股票价格的时间序列数据。

步骤概述

  1. 加载数据集
  2. 数据预处理
  3. 定义网络结构
  4. 设置训练选项
  5. 训练模型
  6. 测试模型

详细步骤

1. 加载数据集

我们将使用一个包含股票价格的时间序列数据集。假设数据集存储在一个 CSV 文件中,名为 stock_prices.csv


Matlab

深色版本

% 加载数据集
data = readtable('stock_prices.csv');
prices = data.Price;
dates = data.Date;
2. 数据预处理

对数据进行预处理,包括划分训练集和测试集、标准化数据等。


Matlab

深色版本

% 划分训练集和测试集
numTimeStepsTrain = floor(0.9 * height(data));
dataTrain = prices(1:numTimeStepsTrain);
dataTest = prices(numTimeStepsTrain+1:end);

% 标准化数据
mu = mean(dataTrain);
sigma = std(dataTrain);
dataTrainStandardized = (dataTrain - mu) / sigma;
dataTestStandardized = (dataTest - mu) / sigma;

% 创建序列数据
sequenceLength = 20;
XTrain = [];
YTrain = [];
for i = 1:(numTimeStepsTrain - sequenceLength)
    XTrain = cat(3, XTrain, dataTrainStandardized(i:i+sequenceLength-1)');
    YTrain = cat(1, YTrain, dataTrainStandardized(i+sequenceLength));
end

XTest = [];
YTest = [];
for i = 1:(height(dataTest) - sequenceLength)
    XTest = cat(3, XTest, dataTestStandardized(i:i+sequenceLength-1)');
    YTest = cat(1, YTest, dataTestStandardized(i+sequenceLength));
end
3. 定义网络结构

接下来,我们定义一个复杂的 LSTM 网络结构。


Matlab

深色版本

% 定义网络结构
inputSize = 1; % 输入特征数
numHiddenUnits = 256; % LSTM 层的隐藏单元数
numResponses = 1; % 输出特征数

layers = [
    sequenceInputLayer(inputSize)
    lstmLayer(numHiddenUnits, 'OutputMode', 'last')
    fullyConnectedLayer(numResponses)
    regressionLayer
];
4. 设置训练选项

定义训练选项,包括最大迭代次数、批量大小、初始学习率等。


Matlab

深色版本

options = trainingOptions('adam', ...
    'MaxEpochs', 50, ...
    'MiniBatchSize', 64, ...
    'InitialLearnRate', 0.001, ...
    'GradientThreshold', 1, ...
    'Verbose', false, ...
    'Plots', 'training-progress');
5. 训练模型

使用 trainNetwork 函数训练模型。


Matlab

深色版本

% 训练模型
net = trainNetwork(XTrain, YTrain, layers, options);
6. 测试模型

加载测试数据并评估模型的性能。


Matlab

深色版本

% 进行预测
YPred = predict(net, XTest, 'MiniBatchSize', 64);

% 反标准化预测结果
YPred = YPred * sigma + mu;
YTest = YTest * sigma + mu;

% 计算均方误差
mse = mean((YPred - YTest).^2);
disp(['Mean Squared Error: ', num2str(mse)]);

% 绘制结果
figure;
plot(dates(1:numTimeStepsTrain), dataTrain, 'b', 'DisplayName', 'Training Data');
hold on;
plot(dates(numTimeStepsTrain+1:end), dataTest, 'r', 'DisplayName', 'Test Data');
plot(dates(numTimeStepsTrain+1:end), YPred, 'g--', 'DisplayName', 'Predicted Data');
legend show;
xlabel('Date');
ylabel('Price');
title('Stock Price Prediction');

完整代码

将上述代码段组合在一起,形成一个完整的 MATLAB 脚本:


Matlab

深色版本

% 加载数据集
data = readtable('stock_prices.csv');
prices = data.Price;
dates = data.Date;

% 划分训练集和测试集
numTimeStepsTrain = floor(0.9 * height(data));
dataTrain = prices(1:numTimeStepsTrain);
dataTest = prices(numTimeStepsTrain+1:end);

% 标准化数据
mu = mean(dataTrain);
sigma = std(dataTrain);
dataTrainStandardized = (dataTrain - mu) / sigma;
dataTestStandardized = (dataTest - mu) / sigma;

% 创建序列数据
sequenceLength = 20;
XTrain = [];
YTrain = [];
for i = 1:(numTimeStepsTrain - sequenceLength)
    XTrain = cat(3, XTrain, dataTrainStandardized(i:i+sequenceLength-1)');
    YTrain = cat(1, YTrain, dataTrainStandardized(i+sequenceLength));
end

XTest = [];
YTest = [];
for i = 1:(height(dataTest) - sequenceLength)
    XTest = cat(3, XTest, dataTestStandardized(i:i+sequenceLength-1)');
    YTest = cat(1, YTest, dataTestStandardized(i+sequenceLength));
end

% 定义网络结构
inputSize = 1; % 输入特征数
numHiddenUnits = 256; % LSTM 层的隐藏单元数
numResponses = 1; % 输出特征数

layers = [
    sequenceInputLayer(inputSize)
    lstmLayer(numHiddenUnits, 'OutputMode', 'last')
    fullyConnectedLayer(numResponses)
    regressionLayer
];

% 设置训练选项
options = trainingOptions('adam', ...
    'MaxEpochs', 50, ...
    'MiniBatchSize', 64, ...
    'InitialLearnRate', 0.001, ...
    'GradientThreshold', 1, ...
    'Verbose', false, ...
    'Plots', 'training-progress');

% 训练模型
net = trainNetwork(XTrain, YTrain, layers, options);

% 进行预测
YPred = predict(net, XTest, 'MiniBatchSize', 64);

% 反标准化预测结果
YPred = YPred * sigma + mu;
YTest = YTest * sigma + mu;

% 计算均方误差
mse = mean((YPred - YTest).^2);
disp(['Mean Squared Error: ', num2str(mse)]);

% 绘制结果
figure;
plot(dates(1:numTimeStepsTrain), dataTrain, 'b', 'DisplayName', 'Training Data');
hold on;
plot(dates(numTimeStepsTrain+1:end), dataTest, 'r', 'DisplayName', 'Test Data');
plot(dates(numTimeStepsTrain+1:end), YPred, 'g--', 'DisplayName', 'Predicted Data');
legend show;
xlabel('Date');
ylabel('Price');
title('Stock Price Prediction');

数据集准备

假设你的 stock_prices.csv 文件内容如下:


深色版本

Date,Price
2023-01-01,100.5
2023-01-02,101.0
2023-01-03,101.5
2023-01-04,102.0
2023-01-05,102.5
...

运行代码

将上述代码保存为一个 .m 文件(例如 lstm_large_model_example.m),然后在 MATLAB 中运行该文件。MATLAB 将加载数据集,训练模型,并评估模型在测试数据上的性能。

结果解释

  • 训练进度图:MATLAB 会在训练过程中绘制训练进度图,显示训练损失和验证损失的变化。
  • 均方误差:训练完成后,代码会输出模型在测试数据上的均方误差(MSE)。
  • 预测结果图:绘制训练数据、测试数据和预测数据的对比图,帮助你直观地评估模型的性能。

通过这个示例,你可以了解如何在 MATLAB 中构建和训练一个复杂的长短期记忆网络(LSTM)模型

标签:YTest,sequenceLength,训练,...,模型,numTimeStepsTrain,长短期,MATLAB,LSTM
From: https://blog.csdn.net/MHD0815/article/details/143825758

相关文章