机器学习之MATLAB代码--MATLAB量子粒子群优化LSTM超参数负荷预测(十三)

  • 代码
    • 数据
      • 结果

代码

代码按照下列顺序依次:

1、

function result(true_value,predict_value,type)
[m,n]=size(true_value);
true_value=reshape(true_value,[1,m*n]);
predict_value=reshape(predict_value,[1,m*n]);
disp(type)
rmse=sqrt(mean((true_value-predict_value).^2));
disp(['根均方差(RMSE):',num2str(rmse)])
mae=mean(abs(true_value-predict_value));
disp(['平均绝对误差(MAE):',num2str(mae)])
mape=mean(abs((true_value-predict_value)./true_value));
disp(['平均相对百分误差(MAPE):',num2str(mape*100),'%'])
R2 = 1 - norm(true_value-predict_value)^2/norm(true_value - mean(true_value))^2;
disp(['决定系数(R2):',num2str(R2)])fprintf('\n')

2、

function r2=R2(T_test,T_sim)
N = length(T_test);
r2 = (N*sum(T_sim.*T_test)-sum(T_sim)*sum(T_test))^2/((N*sum((T_sim).^2)-(sum(T_sim))^2)*(N*sum((T_test).^2)-(sum(T_test))^2));

3、

function  [y,trace,result]=qpsoforlstm(p_train,t_train,p_test,t_test)
PopNum=10;% 种群数
Maxstep=10;%最大寻优迭代数
dim=4;% 寻优维度xmin=[1    1  10 0.001];%分别对两个隐含层的节点 训练次数与学习率寻优
xmax=[200 200  100 0.01];%比如第一个隐含层节点的范围是1-200for i=1:PopNum%随机初始化速度,随机初始化位置for j=1:dimif j==dim% % 隐含层节点与训练次数是整数 学习率是浮点型pop(i,j)=(xmax(j)-xmin(j))*rand+xmin(j);elsepop(i,j)=round((xmax(j)-xmin(j))*rand+xmin(j));  %endend
end% calculate the fitness_value of Pop
pbest = pop;
gbest = zeros(1,dim);
data1 = zeros(Maxstep,PopNum,dim);
data2 = zeros(Maxstep,PopNum);
for i = 1:PopNumfit(i) = fitness(pop(i,:),p_train,t_train,p_test,t_test);f_pbest(i) = fit(i);
end
g = min(find(f_pbest == min(f_pbest(1:PopNum))));
gbest = pbest(g,:);
f_gbest = f_pbest(g);%-------- in the loop -------------
for step = 1:Maxstepmbest =sum(pbest(:))/PopNum;% linear weigh factorb = 1-step/Maxstep*0.5;data1(step,:,:) = pop;data2(step,:) = fit;for i = 1:PopNuma = rand(1,dim);u = rand(1,dim);p = a.*pbest(i,:)+(1-a).*gbest;pop(i,:) = p + b*abs(mbest-pop(i,:)).*...log(1./u).*(1-2*(u >= 0.5));% boundary detectionfor j=1:dimif j ==dimif pop(i,j)>xmax(j) | pop(i,j)<xmin(j)pop(i,j)=(xmax(j)-xmin(j))*rand+xmin(j);  %endelsepop(i,j)=round(pop(i,j));if pop(i,j)>xmax(j) | pop(i,j)<xmin(j)pop(i,j)=round((xmax(j)-xmin(j))*rand+xmin(j));  %endendendfit(i) = fitness(pop(i,:),p_train,t_train,p_test,t_test);if fit(i) < f_pbest(i)pbest(i,:) = pop(i,:);f_pbest(i) = fit(i);endif f_pbest(i) < f_gbestgbest = pbest(i,:);f_gbest = f_pbest(i);endendtrace(step)=f_gbest;step,f_gbest,gbestresult(step,:)=gbest;
end
y=gbest;end

4、

function [xm ,trace,result]=psoforlstm(p_train,t_train,p_test,t_test)N=5;
M=10;
c1=1.5;
c2=1.5;
w=0.8;
D=4;% 定义寻优边界
xmin=[1    1  10 0.001];%分别两个对隐含层节点 训练次数与学习率寻优
xmax=[200 200  100 0.01];%比如第一个隐含层节点的范围是1-200for i=1:N%随机初始化速度,随机初始化位置for j=1:Dif j==D% % 隐含层节点与训练次数是整数 学习率是浮点型x(i,j)=(xmax(j)-xmin(j))*rand+xmin(j);elsex(i,j)=round((xmax(j)-xmin(j))*rand+xmin(j));  %endendv(i,:)=rand(1,D);
end%------先计算各个粒子的适应度,并初始化Pi和Pg----------------------
for i=1:Np(i)=fitness(x(i,:),p_train,t_train,p_test,t_test);y(i,:)=x(i,:);end
[fg,index]=min(p);
pg = x(index,:);             %Pg为全局最优%------进入主要循环,按照公式依次迭代------------for t=1:Mfor i=1:Nv(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));x(i,:)=x(i,:)+v(i,:);for j=1:Dif j ~=Dx(i,j)=round(x(i,j));endif x(i,j)>xmax(j) | x(i,j)<xmin(j)if j==Dx(i,j)=(xmax(j)-xmin(j))*rand+xmin(j);  %elsex(i,j)=round((xmax(j)-xmin(j))*rand+xmin(j));  %endendendtemp=fitness(x(i,:),p_train,t_train,p_test,t_test);if temp<p(i)p(i)=temp;y(i,:)=x(i,:);endif p(i)<fgpg=y(i,:);fg=p(i);endendtrace(t)=fg;result(t,:)=pg;t,fg,pg
end
xm = pg;

5、

function huatu(fitness,process,type)
figure
plot(fitness)
grid on
title([type,'的适应度曲线'])
xlabel('迭代次数/次')
ylabel('适应度值/MSE')figure
subplot(2,2,1)
plot(process(:,1))
grid on
xlabel('迭代次数/次')
ylabel('L1/个')subplot(2,2,2)
plot(process(:,2))
grid on
xlabel('迭代次数/次')
ylabel('L2/个')subplot(2,2,3)
plot(process(:,3))
grid on
xlabel('迭代次数/次')
ylabel('K/次')subplot(2,2,4)
plot(process(:,4))
grid on
xlabel('迭代次数/次')
ylabel('lr')
suptitle([type,'的超参数随迭代次数的变化'])

6、

function y=fitness(x,p,t,pt,tt)
rng(0)
numFeatures = size(p,1);%输入节点数
numResponses = size(t,1);%输出节点数
miniBatchSize = 16; %batchsize 与main....m中保持一致
numHiddenUnits1 = x(1);
numHiddenUnits2 = x(2);
maxEpochs=x(3);
learning_rate=x(4);
layers = [ ...sequenceInputLayer(numFeatures)lstmLayer(numHiddenUnits1)lstmLayer(numHiddenUnits2)fullyConnectedLayer(numResponses)regressionLayer];
options = trainingOptions('adam', ...'MaxEpochs',maxEpochs, ...'MiniBatchSize',miniBatchSize, ...'InitialLearnRate',learning_rate, ...'GradientThreshold',1, ...'Shuffle','every-epoch', ...'Verbose',false);net = trainNetwork(p,t,layers,options);YPred = predict(net,pt,'MiniBatchSize',1);YPred=double(YPred);
[m,n]=size(YPred);
YPred=reshape(YPred,[1,n*m]);
tt=reshape(tt,[1,n*m]);y =mse(YPred-tt);
% 以mse为适应度函数,优化算法目的就是找到一组超参数 使网络的mse最低
rng((100*sum(clock)))

7、

clc;clear;close
%%
lstm=load('result/lstm.mat');
result(lstm.true_value,lstm.predict_value,'LSTM');psolstm=load('result/pso_lstm.mat');
result(psolstm.true_value,psolstm.predict_value,'PSO-LSTM');qpsolstm=load('result/qpso_lstm.mat');
result(qpsolstm.true_value,qpsolstm.predict_value,'QPSO-LSTM');figure
plot(lstm.true_value(end,:),'-r')
hold on;grid on
plot(lstm.predict_value(end,:),'-b')
plot(psolstm.predict_value(end,:),'-k')
plot(qpsolstm.predict_value(end,:),'-k')
legend('真实值','LSTM网络模型','PSO-LSTM网络模型','QPSO-LSTM网络模型')
title('各算法结果')
xlabel('测试集样本')
ylabel('负荷')

8、

%% QPSO优化LSTM时间序列预测
clc;clear;close all;format compact
%%
load u789
n=10;m=2;
[x,y]=data_process(data,n,m);%前n个时刻 预测后m个时刻
method=@mapminmax;%归一化
% method=@mapstd;%标准化
[xs,mappingx]=method(x');x=xs';
[ys,mappingy]=method(y');y=ys';%划分数据
n=size(x,1);
m=round(n*0.7);%前70%训练 后30%测试
XTrain=x(1:m,:)';
XTest=x(m+1:end,:)';
YTrain=y(1:m,:)';
YTest=y(m+1:end,:)';
%% 采用QPSO优化
optimization=1;%是否重新优化
if optimization==1[x ,fit_gen,process]=qpsoforlstm(XTrain,YTrain,XTest,YTest);%分别对隐含层节点 训练次数与学习率寻优save result/qpso_para_result x fit_gen process
elseload result/qpso_para_result
end
%% 画适应度曲线与4个参数的变化曲线
huatu(fit_gen,process,'QPSO')
disp('优化的超参数为:')
disp('L1:'),x(1)
disp('L2:'),x(2)
disp('K:'),x(3)
disp('lr:'),x(4)%% 利用优化得到的参数重新训练
train=1;%是否重新训练
if train==1rng(0)numFeatures = size(XTrain,1);%输入节点数numResponses = size(YTrain,1);%输出节点数miniBatchSize = 16; %batchsize 与fitness.m中保持一致numHiddenUnits1 = x(1);numHiddenUnits2 = x(2);maxEpochs=x(3);learning_rate=x(4);layers = [ ...sequenceInputLayer(numFeatures)lstmLayer(numHiddenUnits1)lstmLayer(numHiddenUnits2)fullyConnectedLayer(numResponses)regressionLayer];options = trainingOptions('adam', ...'MaxEpochs',maxEpochs, ...'MiniBatchSize',miniBatchSize, ...'InitialLearnRate',learning_rate, ...'GradientThreshold',1, ...'Shuffle','every-epoch', ...'Verbose',true,...'Plots','training-progress');net = trainNetwork(XTrain,YTrain,layers,options);save model/qpsolstm net
elseload model/qpsolstm
end
% 预测
YPred = predict(net,XTest,'MiniBatchSize',1);YPred=double(YPred);
% 反归一化
predict_value=method('reverse',YPred,mappingy);
true_value=method('reverse',YTest,mappingy);
save result/qpso_lstm predict_value true_value
%%
load result/qpso_lstm
disp('结果分析')
result(true_value,predict_value,'QPSO-LSTM')fprintf('\n')%
figure
plot(true_value(end,:),'p-')
hold on
plot(predict_value(end,:),'-*')
grid on
title('QPSO-LSTM')
legend('真实值','预测值')
xlabel('预测样本点坐标')
ylabel('值')

9、

%% PSO优化LSTM时间序列预测
clc;clear;close all;format compact
%%
load u789
n=10;m=2;
[x,y]=data_process(data,n,m);%前n个时刻 预测后m个时刻
method=@mapminmax;%归一化
% method=@mapstd;%标准化
[xs,mappingx]=method(x');x=xs';
[ys,mappingy]=method(y');y=ys';%划分数据
n=size(x,1);
m=round(n*0.7);%前70%训练 后30%测试
XTrain=x(1:m,:)';
XTest=x(m+1:end,:)';
YTrain=y(1:m,:)';
YTest=y(m+1:end,:)';
%% 采用PSO优化
optimization=1;%是否重新优化
if optimization==1[x ,fit_gen,process]=psoforlstm(XTrain,YTrain,XTest,YTest);%分别对隐含层节点 训练次数与学习率寻优save result/pso_para_result x fit_gen process
elseload result/pso_para_result
end
%% 画适应度曲线与4个参数的变化曲线
huatu(fit_gen,process,'PSO')
disp('优化的超参数为:')
disp('L1:'),x(1)
disp('L2:'),x(2)
disp('K:'),x(3)
disp('lr:'),x(4)%% 利用优化得到的参数重新训练
train=1;%是否重新训练
if train==1rng(0)numFeatures = size(XTrain,1);%输入节点数numResponses = size(YTrain,1);%输出节点数miniBatchSize = 16; %batchsize 与fitness.m中保持一致numHiddenUnits1 = x(1);numHiddenUnits2 = x(2);maxEpochs=x(3);learning_rate=x(4);layers = [ ...sequenceInputLayer(numFeatures)lstmLayer(numHiddenUnits1)lstmLayer(numHiddenUnits2)fullyConnectedLayer(numResponses)regressionLayer];options = trainingOptions('adam', ...'MaxEpochs',maxEpochs, ...'MiniBatchSize',miniBatchSize, ...'InitialLearnRate',learning_rate, ...'GradientThreshold',1, ...'Shuffle','every-epoch', ...'Verbose',true,...'Plots','training-progress');net = trainNetwork(XTrain,YTrain,layers,options);save model/psolstm net
elseload model/psolstm
end
% 预测
YPred = predict(net,XTest,'MiniBatchSize',1);YPred=double(YPred);
% 反归一化
predict_value=method('reverse',YPred,mappingy);
true_value=method('reverse',YTest,mappingy);
save result/pso_lstm predict_value true_value
%%
load result/pso_lstm
disp('结果分析')
result(true_value,predict_value,'PSO-LSTM')fprintf('\n')%
figure
plot(true_value(end,:),'p-')
hold on
plot(predict_value(end,:),'-*')
grid on
title('PSO-LSTM')
legend('真实值','预测值')
xlabel('预测样本点坐标')
ylabel('值')

10、

%% LSTM时间序列预测
clc;clear;close all
%%
load u789
n=10;m=2;
[x,y]=data_process(data,n,m);%前n个时刻 预测后m个时刻method=@mapminmax;%归一化
% method=@mapstd;%标准化
[xs,mappingx]=method(x');x=xs';
[ys,mappingy]=method(y');y=ys';%划分数据
n=size(x,1);
m=round(n*0.7);%前70%训练 后30%测试
XTrain=x(1:m,:)';
XTest=x(m+1:end,:)';
YTrain=y(1:m,:)';
YTest=y(m+1:end,:)';
%% 参数设置
train=1;%为1就重新训练,否则加载训练好的模型进行预测
if train==1rng(0)numFeatures = size(XTrain,1);%输入节点数numResponses = size(YTrain,1);%输出节点数miniBatchSize = 16; %batchsizenumHiddenUnits1 = 20;numHiddenUnits2 = 20;maxEpochs=20;learning_rate=0.005;layers = [ ...sequenceInputLayer(numFeatures)lstmLayer(numHiddenUnits1)lstmLayer(numHiddenUnits2)fullyConnectedLayer(numResponses)regressionLayer];options = trainingOptions('adam', ...'MaxEpochs',maxEpochs, ...'MiniBatchSize',miniBatchSize, ...'InitialLearnRate',learning_rate, ...'GradientThreshold',1, ...'Shuffle','every-epoch', ...'Verbose',true,...'Plots','training-progress');net = trainNetwork(XTrain,YTrain,layers,options);save model/lstm net
elseload model/lstm
end
YPred = predict(net,XTest,'MiniBatchSize',1);YPred=double(YPred);
% 反归一化
predict_value=method('reverse',YPred,mappingy);
true_value=method('reverse',YTest,mappingy);
save result/lstm predict_value true_value
%%
load result/lstm
disp('结果分析')
result(true_value,predict_value,'LSTM')%
figure
plot(true_value(end,:),'p-')
hold on
plot(predict_value(end,:),'-*')
grid on
title('LSTM')
legend('真实值','预测值')
xlabel('预测样本点坐标')
ylabel('值')

11、

function [in,out]=data_process(data,num,mem)
% 采用1到num作为输入 第num到mem作为输出
n=length(data)-num-mem+1;
for i=1:nin(i,:)=data(i:i+num-1);out(i,:)=data(i+num:i+num+mem-1);
end

数据

结果



如有需要代码和数据的同学请在评论区发邮箱,一般一天之内会回复,请点赞+关注谢谢!!

机器学习之MATLAB代码--MATLAB量子粒子群优化LSTM超参数负荷预测(十三)相关推荐

  1. 【Matlab电力负荷预测】粒子群优化支持向量机短期电力负荷预测【含GUI源码 751期】

    一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]粒子群优化支持向量机短期电力负荷预测[含GUI源码 751期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  2. MATLAB代码:基于粒子群算法的电动汽车充电站最优选址和定容

    MATLAB代码:基于粒子群算法的电动汽车充电站最优选址和定容 关键词:选址定容 电动汽车 充电站位置 仿真平台:MATLAB 主要内容:代码主要做的是一个电动汽车充电站的选址定容问题,提出了能够计及 ...

  3. matlab代码:基于粒子群算法的智能微电网经济运行优化 智能微电网PSO优化算法

    matlab代码:基于粒子群算法的智能微电网经济运行优化 智能微电网PSO优化算法 基于时段电价差异,制定合理的储能系统充放电运行方式,优化各时段微电网与主网之间的交换功率,从而使得风光储微网系统综合 ...

  4. MATLAB实现多目标粒子群优化算法(MOPSO)

    MATLAB实现多目标粒子群优化算法(MOPSO) 这里如何用MATLAB实现多目标粒子群优化算法. 本教程参考:MATLAB实现多目标粒子群算法 对其中的优化项.优化目标项进行了简单的修改.优化项由 ...

  5. PSO粒子群优化-LSTM-pyswarms框架-实现期货价格预测

    1.摘要 本文主要讲解:PSO粒子群优化-LSTM-pyswarms框架-实现期货价格预测 主要思路: 从网上找到影响期货价格预测的相关数据,爬取下来并处理好,形成时间序列训练数据 使用train_t ...

  6. 优化算法 | 基于粒子群优化算法的Bp神经网络预测21~22赛季NBA总冠军(附MATLAB代码)

    文章目录 前言 一.数据准备 二.基于PSO的Bp神经网络预测 1.粒子表达方式 2.目标函数 3.粒子速度和位置的更新 三.MATLAB代码 四.预测结果 五.代码获取方式 总结 近期你可能错过了的 ...

  7. 自适应变异粒子群matlab,一种自适应变异粒子群优化算法的制作方法

    本算法属于数据挖掘领域,涉及到SVM分类器和参数寻优,特别涉及到其变异操作,使得能够最大限度的搜索到全局最优解. 背景技术: 网格划分法是SVM分类器中常用的一种参数寻优方法,原因如下:一是网格划分法 ...

  8. matlab——智能算法之粒子群优化算法、模拟退火算法、遗传算法

    智能算法之粒子群优化算法: %% 初始化种群 f= % 函数表达式 % 求这个函数的最大值 figure(1);ezplot(f,[0,0.01,20]); N = 50; % 初始种群个数 d = ...

  9. 【原理与代码讲解】粒子群优化算法 PSO(基础版)

    0 前言 Gitee 代码地址: https://gitee.com/futurelqh/GA 粒子群优化算法(Particle Swarm Optimization,PSO),其思想源于对鸟群觅食过 ...

最新文章

  1. 内存转换Image到Icon
  2. 【ACM】杭电OJ 2018
  3. 借书证信息管理系统,C语言实现
  4. 【错误记录】Android Studio 编译报错 ( SDK location not found )
  5. python随机大小写字符串_python 随机产生特定类型字符的函数(大写、小写、数字)...
  6. 如何构建AI驱动型智能服务?
  7. 产品研发过程管理专题——软件测试的设计与组织
  8. AI会“偷走”软件测试员的工作吗?只有技术强,才是硬道理!
  9. 德卡Z90读卡器读取社保卡,德卡Z90读卡器CSharp示例程序源码
  10. SwitchHost无法切换环境
  11. 旧版微信支付文档链接
  12. 2010年的一些总结感悟
  13. Oracle安装时先决条件检测失败
  14. python获取当前日期所在的是本月第几周
  15. 模具师傅告诉我塑胶模具是由这10大系统构成,不会的赶紧学习
  16. HTML5在手机端如何全屏展示
  17. 双评价技术指南2020_2020年双十一/双11购买恒温花洒套装不被挖坑的选购指南
  18. 用ChatGPT做嵌入式应用开发
  19. 细读论文基本概念了解
  20. python+airtest+夜神模拟器自动化测试

热门文章

  1. Linux centos6.3_i386等ISO下载地址
  2. 微信公众号开发——项目搭建
  3. java 案例:二月天;求月一共有多少天
  4. java做的web系统 m1 读卡器 结合_rfid android 系统对 读卡器的信息读取演示。 可 m1卡 238万源代码下载- www.pudn.com...
  5. python3内置集成开发工具_python应用(3):启用集成开发工具pycharm
  6. php加入购物车怎样实现_php购物车实现代码
  7. 用“网文快捕”破解不能复制文字的网站
  8. DDos攻击是什么?怎么对应
  9. 2021年求职秘籍丨如何在 IT 部门找到工作?4个步骤必不可少
  10. ofbiz作为企业复杂应用开发平台的要求