当前位置:   article > 正文

融合正余弦和柯西变异的麻雀搜索算法优化CNN-BiLSTM,实现多输入单输出预测,MATLAB代码..._柯西变异 鱼鹰 麻雀优化

柯西变异 鱼鹰 麻雀优化

上期作者推出的融合正余弦和柯西变异的麻雀优化算法,效果着实不错,今天就用它来优化一下CNN-BiLSTMCNN-BiLSTM的流程:将训练集数据输入CNN模型中,通过CNN的卷积层和池化 层的构建,用来特征提取,再经过BiLSTM模型进行序列预测。CNN-BiLSTM模型有众多参数需要调整,包括学习率,正则化参数,神经网络层数,卷积层数,BatchSize,最大训练次数等。

cba50d3c311a00937691985f66b85c92.png

本文采用上一期推出的融合正余弦和柯西变异的麻雀优化算融合正余弦和柯西变异的麻雀搜索算法,并与灰狼算法,粒子群算法比较,对CNN-BiLSTM的学习率正则化参数BiLSTM隐含层神经元个数进行优化。

数据选用的是一段风速数据,数据较为简单,主要是方便大家后期的替换。数据处理在代码中已经处理好,数据为多输入单输出,即用前n天的数据预测第n+1天的数据。

b38dff806f151dfcae37b355865de984.png

Part 1 预测效果

  • 优化前:

53ee08558f9fd3bdc76f366419f41c3c.png

  • 优化后:

    46fc35ab8c5267c5849d2f2dfd74e517.png5cc118b52fd82830f72f2f20848166ec.pngd25e681174632edd7dae3667a8b01db6.png794b8d7c9b454262414d8e931c10c1a4.png1f13286cdb9c971d50ad1bf852e1f1f1.png

可以看到效果还是杠杠滴!

另外本次代码文件会将“融合正余弦和柯西变异的麻雀搜索算法在CEC函数中的对比代码,也就是这一期的代码一并打包

dde653eb0599c7ff8a292b5b10ae4543.png

Part 2 核心代码

  1. % 参数设置
  2. options0 = trainingOptions('adam', ... % 优化算法Adam
  3. 'MaxEpochs', 300, ... % 最大训练次数
  4. 'GradientThreshold', 1, ... % 梯度阈值
  5. 'InitialLearnRate', 0.01, ... % 初始学习率
  6. 'LearnRateSchedule', 'piecewise', ... % 学习率调整
  7.     'LearnRateDropPeriod',100, ...                   % 训练100次后开始调整学习率
  8. 'LearnRateDropFactor',0.01, ... % 学习率调整因子
  9. 'L2Regularization', 0.002, ... % 正则化参数
  10. 'ExecutionEnvironment', 'cpu',... % 训练环境
  11. 'Verbose', 1, ... % 关闭优化过程
  12. 'Plots', 'none'); % 画出曲线
  13. % 网络训练
  14. net0 = trainNetwork(Train_xNorm,Train_yNorm,lgraph0,options0 );
  15. Predict_Ynorm_Test = net0.predict(Test_xNorm);
  16. Predict_Y_Test = mapminmax('reverse',Predict_Ynorm_Test',yopt);
  17. Predict_Y_Test = Predict_Y_Test';
  18. rmse = sqrt(mean((Predict_Y_Test(1,:)-(Test_y(1,:))).^2,'ALL'));
  19. R2 = 1 - norm(Test_y - Predict_Y_Test)^2 / norm(Test_y - mean(Test_y ))^2;
  20. disp(['优化前的RMSE:',num2str(rmse)])
  21. % 预测集拟合效果图
  22. figure
  23. hold on
  24. plot(Predict_Y_Test,'r-*','LineWidth',1.0)
  25. plot(Test_y,'b-o','LineWidth',1.0)
  26. legend('CNN-BiLSTM预测值','实际值')
  27. ylabel('预测结果')
  28. xlabel('预测样本')
  29. title(['优化前测试集预测结果对比RMSE:',num2str(rmse)])
  30. box off
  31. set(gcf,'color','w')
  32. %% 调用SSA优化CNN-BILSTM
  33. disp('调用SSA优化CNN-BiLSTM......')
  34. % SSA优化参数设置
  35. SearchAgents = 30; % 种群数量 30
  36. Max_iterations = 20; % 迭代次数 20
  37. lowerbound = [0.0001 0.0001 10 10 10]; %五个参数的下限分别是正则化参数,学习率,BiLSTM的三个隐含层个数
  38. upperbound = [0.01 0.01 500 30 30]; %五个参数的上限
  39. dimension = length(lowerbound);%数量,即要优化的LSTM参数个数
  40. [fMin,Best_pos,Convergence_curve,bestnet] = SCSSAforCNNBILSTM(SearchAgents,Max_iterations,lowerbound,upperbound,dimension,Train_xNorm,Train_yNorm,Test_xNorm,Test_y,yopt,n);
  41. L2Regularization = Best_pos(1,1); % 最佳L2正则化系数
  42. InitialLearnRate = Best_pos(1,2) ;% 最佳初始学习率
  43. NumOfUnits1= fix(Best_pos(1,3)); % 最佳神经元个数
  44. NumOfUnits2= fix(Best_pos(1,4)); % 最佳神经元个数
  45. NumOfUnits3= fix(Best_pos(1,5)); % 最佳神经元个数
  46. disp('优化结束,将最佳net导出并用于测试......')
  47. %% 对训练集的测试
  48. setdemorandstream(pi);
  49. Predict_Ynorm_Train = bestnet.predict(Train_xNorm); %对训练集的测试
  50. Predict_Y_Train = mapminmax('reverse',Predict_Ynorm_Train',yopt); %反归一化
  51. Predict_Y_Train = Predict_Y_Train';
  52. % 适应度曲线
  53. figure
  54. plot(Convergence_curve,'r-', 'LineWidth', 1.5);
  55. title('SCSSA-CNN-BiLSTM', 'FontSize', 10);
  56. legend('适应度值')
  57. xlabel('迭代次数', 'FontSize', 10);
  58. ylabel('适应度值', 'FontSize', 10);
  59. box off
  60. set(gcf,'color','w')
  61. %训练集拟合效果图
  62. figure
  63. hold on
  64. plot(Predict_Y_Train,'r-*','LineWidth',1.0)
  65. plot(Train_y,'b-o','LineWidth',1.0);
  66. ylabel('预测结果')
  67. xlabel('预测样本')
  68. legend('SCSSA-CNN-BiLSTM预测值','实际值')
  69. title('优化后训练集预测结果对比')
  70. box off
  71. set(gcf,'color','w')
  72. %% 对测试集的测试
  73. Predict_Ynorm = bestnet.predict(Test_xNorm);
  74. Predict_Y = mapminmax('reverse',Predict_Ynorm',yopt);
  75. Predict_Y = Predict_Y';
  76. figure
  77. hold on
  78. plot(Predict_Y,'r-*','LineWidth',1.0)
  79. plot(Test_y,'b-o','LineWidth',1.0)
  80. legend('SCSSA-CNN-BiLSTM预测值','实际值')
  81. ylabel('预测结果')
  82. xlabel('预测样本')
  83. title('优化后测试集预测结果对比')
  84. box off
  85. set(gcf,'color','w')
  86. %% 回归图与误差直方图
  87. figure;
  88. plotregression(Test_y,Predict_Y,['优化后回归图']);
  89. set(gcf,'color','w')
  90. figure;
  91. ploterrhist(Test_y-Predict_Y,['误差直方图']);
  92. set(gcf,'color','w')
  93. %% 打印出评价指标
  94. % 预测结果评价
  95. ae= abs(Predict_Y - Test_y);
  96. rmse = (mean(ae.^2)).^0.5;
  97. mse = mean(ae.^2);
  98. mae = mean(ae);
  99. mape = mean(ae./Predict_Y);
  100. R = corr(Test_y,Predict_Y);
  101. R2 = 1 - norm(Test_y - Predict_Y)^2 / norm(Test_y-mean(Test_y ))^2;
  102. disp('预测结果评价指标:')
  103. disp(['RMSE = ', num2str(rmse)])
  104. disp(['MSE = ', num2str(mse)])
  105. disp(['MAE = ', num2str(mae)])
  106. disp(['MAPE = ', num2str(mape)])
  107. disp(['相关系数R = ', num2str(R)])
  108. disp(['决定系数R^2为:',num2str(R2)])
  109. disp(['BiLSTM的最佳神经元个数为:', num2str(NumOfUnits1), ',',num2str(NumOfUnits2), ',',num2str(NumOfUnits3)])
  110. disp(['最佳初始学习率为:', num2str(InitialLearnRate)])
  111. disp(['最佳L2正则化系数为:', num2str(L2Regularization)])

代码获取方式,点击下方卡片,后台回复关键词:

TGDM825

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/806930
推荐阅读
相关标签
  

闽ICP备14008679号