江西专业的企业网站建设公司产品网页的制作
微❤关注“电气仔推送”获得资料(专享优惠)
主要内容:
LSTM-AdaBoost负荷预测模型先通过 AdaBoost集成算法串行训练多个基学习器并计算每个基学习 器的权重系数,接着将各个基学习器的预测结果进行线性组合,生成最终的预测结果。代码中的LSTM可以替换为任意的机器学习算法。
部分程序:
%% 数据归一化
 [inputn,inputps]=mapminmax(input_train,0,1);
 [outputn,outputps]=mapminmax(output_train);
 inputn_test=mapminmax('apply',input_test,inputps);
 %% 获取输入层节点、输出层节点个数
 inputnum=size(input_train,1);
 outputnum=size(output_train,1);
 disp('/')
 disp('LSTM神经网络结构...')
 disp(['输入层的节点数为:',num2str(inputnum)])
 disp(['输出层的节点数为:',num2str(outputnum)])
numFeatures = inputnum;   %特征为一维
 numResponses = outputnum;  %输出也是一维
 numHiddenUnits1 = 25;   %创建LSTM回归网络,指定LSTM层的隐含单元个数。可调
 layers = [ ...
     sequenceInputLayer(numFeatures)    %输入层
     lstmLayer(numHiddenUnits1, 'OutputMode', 'sequence')
     fullyConnectedLayer(numResponses)    %为全连接层,是输出的维数。
     regressionLayer];      %其计算回归问题的半均方误差模块 。即说明这不是在进行分类问题。
  
 %指定训练选项,求解器设置为adam, 1000轮训练。
 %梯度阈值设置为 1。指定初始学习率 0.01,在 125 轮训练后通过乘以因子 0.2 来降低学习率。
 options = trainingOptions('adam', ...
     'MaxEpochs',1000, ...
     'GradientThreshold', 1, ...
     'InitialLearnRate',0.01, ...      
     'LearnRateSchedule','piecewise', ...%每当经过一定数量的时期时,学习率就会乘以一个系数。
     'LearnRateDropFactor', 0.01, ...
     'LearnRateDropPeriod',600, ...      %乘法之间的纪元数由" LearnRateDropPeriod"控制。可调
     'Verbose',0,  ...  %如果将其设置为true,则有关训练进度的信息将被打印到命令窗口中。默认值为true。
     'Plots','training-progress');    %构建曲线图 将'training-progress'替换为none
 net0 = trainNetwork(inputn,outputn,layers,options); 
 an0 = predict(net0,inputn_test);  
 %预测结果反归一化与误差计算
 test_simu0=mapminmax('reverse',an0,outputps); %把仿真得到的数据还原为原始的数量级
 %误差指标
 error0 = output_test - test_simu0;
 mse0=mse(output_test,test_simu0)
 %% 标准LSTM神经网络作图
 figure
 plot(output_test,'b-','markerfacecolor',[0.5,0.5,0.9],'MarkerSize',6)
 hold on
 plot(test_simu0,'r--','MarkerSize',6)
 title(['mse误差:',num2str(mse0)])
 legend('真实y','预测的y')
 xlabel('样本数')
 ylabel('负荷值')
  
训练进度:

预测结果:


预测误差:

