✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

⛄ 内容介绍

为提高股价估算或预测准确性和适应性,本文提出了一种基于贝叶斯网络卷积神经网络(Convolutional Neural Network, CNN)和门控循环单元(gated recurrent unit, GRU)的股价预测方法.首先,利用数据采集与监视控制系统获取股价数据进行预处理.其次,将预处理后的海量数据按时间滑动窗口构造为连续的特征矩阵作为输入,然后利用贝叶斯网络优化模型参数,最后利用CNN-GRU混合模型建立输入特征与股价的映射关系,生成基于BO-CNN-GRU中股价预测模型,进而实现其回归预测.验证了所提的模型具有较高的准确性和可行性,相关结论与讨论对股价研发有一定参考价值.

⛄ 部分代码

clc;clear;close all;  train_y_feature_label=y_feature_label1(index_label(1:train_num),:); 

 vaild_y_feature_label=y_feature_label1(index_label(train_num+1:vaild_num),:);

 test_y_feature_label=y_feature_label1(index_label(vaild_num+1:end),:);

%%

train_y=train_y_feature_label;  train_y(find(train_y==0))=0.1;  %防止分母为0 

train_MAE=sum(sum(abs(y_train_predict-train_y)))/size(train_y,1)/size(train_y,2) ; disp(['训练集平均绝对误差MAE:',num2str(train_MAE)])

train_MAPE=sum(sum(abs((y_train_predict-train_y)./train_y)))/size(train_y,1)/size(train_y,2); disp(['训练集平均相对误差MAPE:',num2str(train_MAPE)])

train_MSE=(sum(sum(((y_train_predict-train_y)).^2))/size(train_y,1)/size(train_y,2)); disp(['训练集均方根误差MSE:',num2str(train_MSE)])     

train_RMSE=sqrt(sum(sum(((y_train_predict-train_y)).^2))/size(train_y,1)/size(train_y,2)); disp(['训练集均方根误差RMSE:',num2str(train_RMSE)]) 

train_R2 = 1 - mean(norm(train_y - y_train_predict)^2 / norm(train_y - mean(train_y))^2);  disp(['训练集均方根误差R2:',num2str(train_R2)]) 

vaild_y=vaild_y_feature_label;vaild_y(find(vaild_y==0))=0.1;  %防止分母为0 

vaild_MAE=sum(sum(abs(y_vaild_predict-vaild_y)))/size(vaild_y,1)/size(vaild_y,2) ; disp(['验证集平均绝对误差MAE:',num2str(vaild_MAE)])

vaild_MAPE=sum(sum(abs((y_vaild_predict-vaild_y)./vaild_y)))/size(vaild_y,1)/size(vaild_y,2); disp(['验证集平均相对误差MAPE:',num2str(vaild_MAPE)])

vaild_MSE=(sum(sum(((y_vaild_predict-vaild_y)).^2))/size(vaild_y,1)/size(vaild_y,2)); disp(['验证集均方根误差MSE:',num2str(vaild_MSE)])     

vaild_RMSE=sqrt(sum(sum(((y_vaild_predict-vaild_y)).^2))/size(vaild_y,1)/size(vaild_y,2)); disp(['验证集均方根误差RMSE:',num2str(vaild_RMSE)]) 

vaild_R2 = 1 - mean(norm(vaild_y - y_vaild_predict)^2 / norm(vaild_y - mean(vaild_y))^2);  disp(['验证集均方根误差R2:',num2str(vaild_R2)]) 

test_y=test_y_feature_label;test_y(find(test_y==0))=0.1;  %防止分母为0 

test_MAE=sum(sum(abs(y_test_predict-test_y)))/size(test_y,1)/size(test_y,2) ; disp(['测试集平均绝对误差MAE:',num2str(test_MAE)])

test_MAPE=sum(sum(abs((y_test_predict-test_y)./test_y)))/size(test_y,1)/size(test_y,2); disp(['测试集平均相对误差MAPE:',num2str(test_MAPE)])

test_MSE=(sum(sum(((y_test_predict-test_y)).^2))/size(test_y,1)/size(test_y,2)); disp(['测试集均方根误差MSE:',num2str(test_MSE)])     

test_RMSE=sqrt(sum(sum(((y_test_predict-test_y)).^2))/size(test_y,1)/size(test_y,2)); disp(['测试集均方根误差RMSE:',num2str(test_RMSE)]) 

test_R2 = 1 - mean(norm(test_y - y_test_predict)^2 / norm(test_y - mean(test_y))^2);  disp(['测试集均方根误差R2:',num2str(test_R2)]) 

%%

figure;

num=12;

if num>size(test_y,2)

    num=size(test_y,2);

end

plot(test_y(:,num))

hold on

plot(y_test_predict(:,num))

legend('True','predict')

⛄ 运行结果

时序预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络时间序列预测_MSE

时序预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络时间序列预测_卷积神经网络_02

⛄ 参考文献

[1] 罗  勇, 荣  娜, 詹献文. 基于CNN-GRU的配电网中压馈线合环电流预测研究[J]. 应用数学进展, 2022, 11(7):17.

[2] 史玉良, 陈智智, 张坤. 基于GRU优化用电信息采集终端故障预测模型的方法及系统:, CN110335168A[P]. 2019.

[3] 李鸿雁, 苏庭波. 基于贝叶斯网络和卷积神经网络的手绘草图识别方法[J]. 西南师范大学学报:自然科学版, 2019, 44(9):7.

[4] 曾蔚, 吴伊萍. 一种基于卷积神经网络和贝叶斯网络的用户行为预测算法[J]. 安阳师范学院学报, 2019(2):6.

[5] 周洁超. 基于贝叶斯网络的时间序列预测[D]. 大连海事大学, 2016.

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料