使用matlab处理时序预测问题,导入的是一个一维向量,前5个作为输入,第6个作为输出,这样就是1-5输入,6输出,2-6输入,7输出。使用matlab进行处理,先进行数据形状改变,归一化等,然后搭建lstm模型,再进行预测,在使用的过程中,由于数据数量级差别过大,所以使用log对数据进行处理
%% 导入数据(时间序列的单列数据)
result = xlsread('data1.xlsx');
result = log(result);
%% 数据分析
num_samples = length(result); % 样本个数
kim = 5; % 延时步长(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: 20475;
P_train = res(temp(1: 16379), 1: kim)';
T_train = res(temp(1: 16379), kim+1)';
M = size(P_train, 2);
P_test = res(temp(16380: end), 1: kim)';
T_test = res(temp(16380: end), kim+1)';
N = size(P_test, 2);
%% 创建模型
layers = [
sequenceInputLayer(5) % 建立输入层
lstmLayer(10, 'OutputMode', 'last') % LSTM层
reluLayer % Relu激活层
fullyConnectedLayer(1) % 全连接层
regressionLayer]; % 回归层
%% 参数设置
options = trainingOptions('adam', ... % Adam 梯度下降算法
'MaxEpochs', 100, ... % 最大训练次数
'InitialLearnRate', 5e-5, ... % 初始学习率
'LearnRateSchedule', 'piecewise', ... % 学习率下降
'LearnRateDropFactor', 0.1, ... % 学习率下降因子
'LearnRateDropPeriod', 800, ... % 经过800次训练后 学习率为 0.005 * 0.1
'Shuffle', 'every-epoch', ... % 每次训练打乱数据集
'Plots', 'training-progress', ... % 画出曲线
'Verbose', false);
%% 训练模型
net = trainNetwork(p_train, t_train, layers, options); % 训练集输入、训练集输出、模型结构、超参数
如果有需要,可以联系:https://docs.qq.com/doc/DWEtRempVZ1NSZHdQ。