关于电力负荷预测,后台留言的呼声很高。今天就为大家带来一期关于电力负荷预测的文章。
简介
简单说一下本期内容:
①对电力负荷数据进行处理
②采用极限学习机(ELM)对电力负荷数据进行训练和预测
③采用减法平均优化器算法优化极限学习机的权值阈值,降低预测误差
④采用白鲸算法优化ELM,并与减法优化器算法对比,突出减法优化器的高效准确性
内容详解
①对电力负荷数据进行处理
本次数据包含负荷值,温度,湿度,风速,压强,降水量,能见度,水汽压和体感温度,部分数据截图如下:
选取900个样本作为训练集,每个样本组成为:当天24个小时的全部数据,因此训练集的输入数据大小为900*216,其中216=24*9,24代表24个小时,9代表9个特征。训练集的输出数据大小为:900*1。1代表未来一小时的负荷值。
选取300个样本作为测试集,同理,测试集的输入数据大小为300*216,训练集的输出数据大小为:300*1。
②采用极限学习机(ELM)对电力负荷数据进行训练和预测
预测结果如下:
可以看到,未优化的ELM预测效果不是很理想。
③采用减法平均优化器算法优化极限学习机的权值阈值,并与白鲸算法做对比。
由误差对比曲线和预测结果对比,可以看到减法优化器算法优化ELM的收敛精度是非常高的!
原理代码
数据替换较为简单,代码简单易懂,可以二次开发,部分代码如下:
clear
clc
close all
%% 准备数据
data = readmatrix('data.csv');
data = data(:,2:10);
w=1; % w是滑动窗口的大小
s=24; % 选取前24小时的所有数据(这里的所有数据包含温度,湿度,风速,负荷值等所有变量)去预测未来一小时的数据
m = 900; %选取m个样本作训练集
n = 300; %选取n个样本作测试集
%% 数据归一化
[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('神经网络结构...')
disp(['输入层的节点数为:',num2str(inputnum)])
disp(['输出层的节点数为:',num2str(outputnum)])
hiddennum = 40; %手动赋值
activation = 'sig';
% ELM训练
TYPE=0; %0代表预测,1代表分类
[IW1,B1,LW,TF1,TYPE1] = elmtrain(inputn,outputn,hiddennum,'sig',TYPE);
% ELM仿真测试
tn_sim = elmpredict(inputn_test,IW1,B1,LW,TF1,TYPE1);
%5.1. 反归一化
T_sim0 = mapminmax('reverse',tn_sim,outputps);
error0 = output_test-T_sim0;
%误差指标
mse0=mse(output_test,T_sim0);
%% 标准ELM神经网络作图
figure
plot(output_test,'b-','markerfacecolor',[0.5,0.5,0.9],'MarkerSize',6)
hold on
plot(T_sim0,'r--','MarkerSize',6)
legend('真实y','预测的y')
xlabel('样本数')
ylabel('负荷')
title(['标准ELM预测结果',newline,'MSE误差为:',num2str(mse0)])
disp(['标准ELM测试集的均方误差为:',num2str(mse0)])
%% 调用SABO优化ELM
[score,bestchrom,trace]=SABOforELM(inputnum,hiddennum,TYPE,activation,inputn,outputn,inputn_test,output_test,outputps);
% 优化后结果分析
figure
set(gca,'looseInset',[0 0 0 0])
plot(trace,'r-','linewidth',1)
title('SABO适应度曲线图','fontsize',12,'fontname','TimesNewRoman');
xlabel('进化代数','fontsize',12,'fontname','TimesNewRoman');ylabel('诊断正确率','fontsize',12,'fontname','TimesNewRoman');
代码获取
代码目录如下:
完整代码获取,下方卡片回复关键词:
SABOELM