时序预测 | MATLAB实现贝叶斯优化CNN-LSTM时间序列预测(股票价格预测)
效果一览
基本介绍
MATLAB实现贝叶斯优化CNN-LSTM(卷积双向长短期记忆神经网络)时间序列预测,Bayes-CNN-LSTM模型股票价格预测
模型搭建
- CNN-LSTM模型结合了CNN和LSTM的优点,CNNLSTM网络模型如图1所示,本文使用的CNN-LSTM模型的第一部分是由卷积层和最大值组成的CNN部分池化层,对原始数据进行预处理并输入CNN卷积层,利用卷积核自适应提取生命特征,卷积层将遍历输入信息,将卷积核权重与局部序列进行卷积运算体管信息得到初步的特征矩阵,比原始序列数据(矩阵)更具表现力。
- 本文使用的池化层是最大池化层,池化操作对提取的特征进行数据降维,避免模型过拟合,保留主要特征。最大池化层将前一个卷积层得到的特征矩阵作为输入,在这个矩阵上滑动一个池化窗口,在每一次滑动中取池化窗口的最大值,输出一个更具表现力的特征矩阵。
- 池化后,连接一个 LSTM 层,提取相关向量由CNN构造成一个长期的时间序列作为LSTM的输入数据。卷积层将卷积层的数据展平(Flatten),模型中加入Flatten,将(height,width,channel)的数据压缩成一个长高宽通道的一维数组,然后我们可以添加直接密集层。
- 对卷积池化数据压缩特征操作,多个卷积特征提取框架提取的特征融合或从输出层融合,全连接层聚合学习到的特征,激活函数使用Relu。
- Relu函数具有单边抑制作用,可以产生更多的稀疏性,避免梯度消失。 在最终输出之前,将 Dropout 率设置为 0.2,以避免模型过拟合。
- 通常,在模型训练过程中需要对超参数进行优化,为模型选择一组最优的超参数,以提高预测的性能和有效性,例如 CNN-LSTM 模型中的batch_size、full_num、lstm_num、num_filter。 凭经验设置超参数会使最终确定的模型超参数组合不一定是最优的,这会影响模型网络的拟合程度及其对测试数据的泛化能力。
- 伪代码
- 在对 CNN-LSTM 使用贝叶斯优化时,不同的参数组合的 CNN-LSTM 作为自变量,平均误差(MAE)作为贝叶斯框架的输出y,具体步骤如下:
- 通过调整优化算法调整模型参数,学习重复率和贝叶斯优化超参数来调整模型参数。
程序设计
- 完整程序私信博主。
%% 搭建CNN模型
rng('default');
inputSize = 1;
numEpochs = 200;
batchSize = 16;
nTraining = length(label);
% CONV -> ReLU -> MAXPOOL -> FC -> DROPOUT -> FC -> SOFTMAX
layers = [ ...
sequenceInputLayer(inputSize)
convolution1dLayer(5,100,'Padding',2,'Stride', 1) % 卷积层 1
batchNormalizationLayer;
reluLayer(); % ReLU 层 1
convolution1dLayer(5,70,'Padding',2,'Stride', 1); % 卷积层 2
batchNormalizationLayer;
maxPooling1dLayer(1,'Stride',1); % 最大池化 池化层 1
convolution1dLayer(3,50,'Padding',1,'Stride', 1); % 卷积层 3
reluLayer(); % ReLU 层 3
maxPooling1dLayer(1,'Stride',1);
convolution1dLayer(3,40,'Padding',1,'Stride', 1); % 卷积层 4
reluLayer(); % ReLU 层 2
maxPooling1dLayer(1,'Stride',1); % 最大池化 池化层 1
fullyConnectedLayer(1,'Name','fc1')
regressionLayer]
options = trainingOptions('adam',...
'InitialLearnRate',1e-3,...% 学习率
'MiniBatchSize', batchSize, ...
'MaxEpochs',numEpochs);
[net,info1] = trainNetwork(input_train,output_train,layers,options);
%% 提取特征
fLayer = 'fc1';
trainingFeatures = activations(net, input_train, fLayer, ...
'MiniBatchSize', 16, 'OutputAs', 'channels');
trainingFeatures=cell2mat(trainingFeatures);
for i=1:length(trainingFeatures)
TF{i}=double(trainingFeatures(:,i));
end
%% 搭建LSTM模型
inputSize = 1;
numHiddenUnits = 100;
layers = [ ...
sequenceInputLayer(inputSize)
lstmLayer(numHiddenUnits,'OutputMode','last')
lstmLayer(numHiddenUnits-30)
lstmLayer(numHiddenUnits-60)
fullyConnectedLayer(1)
regressionLayer]
options = trainingOptions('adam',...
'InitialLearnRate',1e-3,...% 学习率
'MiniBatchSize', 8, ...
'MaxEpochs',50, ...
'Plots','training-progress');
[net1,info1] = trainNetwork(TF,output_train',layers,options);
%% 测试集
% 测试集提取特征
testingFeatures = activations(net, input_test, fLayer, ...
'MiniBatchSize', 8, 'OutputAs', 'channels');
testingFeatures=cell2mat(testingFeatures);
for i=1:length(testingFeatures)
TFT{i}=double(testingFeatures(:,i));
end
YPred = predict(net1,TFT);
YPred=mapminmax('reverse',YPred,yopt);
学习总结
贝叶斯优化可以充分利用历史调优信息,减少不必要的目标函数评估,并改进参数搜索效率。在模型训练过程中,使用ADAM优化算法进一步优化网络权重参数,使得预测结果更准确。提出的基于超参数的优化搜索方案结合股票预测应采用CNN-LSTM模型,选用的模型具有更高的预测精度和泛化能力。
参考文献
[1] https://blog.csdn.net/kjm13182345320/article/details/127261869?spm=1001.2014.3001.5501
[2] https://blog.csdn.net/kjm13182345320/article/details/127261869?spm=1001.2014.3001.5501
[3] G. W. Jiao, and C. Hu, G: Gun barrel life evaluation and prediction, J. Ordnance Equip.Eng. 39, 66 (2018).
[4] M. T. Li et al., Barrel life prediction method based on inner surface melting layer theory,J.Gun Launch Control, 5–8 (2009).