DBO优化SVM的电力负荷预测,附MATLAB代码

今天为大家带来一期基于DBO-SVM的电力负荷预测。

原理详解

文章对支持向量机(SVM)的两个参数进行优化,分别是:惩罚系数c和 gamma。

其中,惩罚系数c表示对误差的宽容度。c越高,说明越不能容忍出现误差,容易过拟合。c越小,容易欠拟合。c过大或过小,泛化能力都会变差。

gamma是选择RBF函数作为kernel后,该函数自带的一个参数。隐含地决定了数据映射到新的特征空间后的分布,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的个数影响训练与预测的速度。

本文所选SVM是从官网下载的libsvm-3.3版本,作者已编译好,大家可以直接运行。如果想自行编译的童鞋可以从网站下载:https://www.csie.ntu.edu.tw/\~cjlin/libsvm/index.html,编译步骤可以参考https://blog.csdn.net/qq_42457960/article/details/109275227

采用蜣螂优化SVM,参数设置范围分别是:

|-------|-----------------|
| 惩罚系数c | [0.001, 1000] |
| gamma | [2^-8,2^8] |

将DBO种群数设置为:30,迭代次数设置为60。


数据准备

对电力负荷数据进行处理

本次数据包含负荷值,温度,湿度,风速,压强,降水量,能见度,水汽压和体感温度,部分数据截图如下:

选取1200个样本作为训练集,每个样本组成为:当天24个小时的全部数据,因此训练集的输入数据大小为1200*216,其中216=24*9,24代表24个小时,9代表9个特征。训练集的输出数据大小为:1200*1。1代表未来一小时的负荷值。

选取100个样本作为测试集,同理,测试集的输入数据大小为100*216,训练集的输出数据大小为:100*1。

结果展示

采用SVM对电力负荷数据进行训练和预测

SVM的预测结果如下:

可以看到,未优化的SVM预测效果还是不错的,但是仍然有改进空间。

DBO-SVM模型的预测效果如下:

误差对比图如下:

DBO-SVM的进化曲线:

可以看到DBO-SVM预测效果有了明显提升,DBO-SVM的MSE误差为0.79022,相比于未优化SVM的17.2023有了很大提升!

DBO-SVM的回归拟合图:

误差直方图:

部分代码

cs 复制代码
%% 初始化DBO参数
pop=30;   %初始种群规模
maxgen=60;   %最大进化代数
lb = [10^-3, 2^-8];
ub = [10^3, 2^8];
dim = 2;
[fMin,bestX,Convergence_curve ] = DBOforSVM(pop, maxgen,lb,ub,dim,inputn,output_train,inputn_test,output_test);
bestc=bestX(1);
bestg=bestX(2);
disp(['最佳参数为:',num2str(bestX)])
cmd = [' -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 -h 0 -q'];
mode1= libsvmtrain(output_train,inputn,cmd);
[test_simu1,~,~]= libsvmpredict(output_test,inputn_test,mode1);
mse1=mse(output_test,test_simu1); 
error1 = output_test - test_simu1;


%% 绘制进化曲线
figure
plot(Convergence_curve,'r-','linewidth',2)
xlabel('进化代数')
ylabel('均方误差')
legend('最佳适应度')
title('DBO-SVM的MSE进化曲线')
% 绘制误差对比图
figure
plot(abs(error1),'-*')
hold on
plot(abs(error0),'-or')
title(['SVM的MSE:',num2str(mse0),newline,'DBO-SVM的MSE:',num2str(mse1)])
xlabel('预测样本','fontsize',12)
ylabel('误差绝对值','fontsize',12)
legend('DBO-SVM预测器预测','SVM预测器预测')
% 绘制结果对比曲线图
figure
plot(output_test,'b-.')
hold on
plot(test_simu0,'r')
hold on
plot(test_simu1,'g')
hold off
grid on
title(['结果对比曲线图'])
legend('真实值','SVM预测值','DBO-SVM预测值')
xlabel('样本编号')
ylabel('负荷值')


%% 回归图与误差直方图
figure;
plotregression(test_simu1,output_test,['优化后回归图']);
set(gcf,'color','w')


figure;
ploterrhist(test_simu1-output_test,['误差直方图']);
set(gcf,'color','w')


%% 打印出评价指标
% 预测结果评价
ae= abs(test_simu1-output_test);
rmse = (mean(ae.^2)).^0.5;
mse = mean(ae.^2);
mae = mean(ae);
mape = mean(ae./test_simu1);
[R,r] = corr(output_test,test_simu1);
R2 = 1 - norm(output_test -  test_simu1)^2 / norm(output_test-mean(output_test ))^2;
disp('预测结果评价指标:')
disp(['RMSE = ', num2str(rmse)])
disp(['MSE  = ', num2str(mse)])
disp(['MAE  = ', num2str(mae)])
disp(['MAPE = ', num2str(mape)])
disp(['决定系数R^2为:',num2str(R2)])

代码获取

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

DBOSVM

相关推荐
时见先生1 小时前
Python库和conda搭建虚拟环境
开发语言·人工智能·python·自然语言处理·conda
yongui478342 小时前
基于MATLAB的NALM锁模光纤激光器仿真实现
开发语言·matlab
tobias.b3 小时前
408真题解析-2010-7-数据结构-无向连通图
数据结构·算法·图论·计算机考研·408真题解析
昨夜见军贴06163 小时前
IACheck AI审核在生产型企业质量控制记录中的实践探索——全面赋能有关物质研究合规升级
大数据·人工智能
智星云算力4 小时前
智星云镜像共享全流程指南,附避坑手册(新手必看)
人工智能
盖雅工场4 小时前
驱动千店销售转化提升10%:3C零售门店的人效优化实战方案
大数据·人工智能·零售·数字化管理·智能排班·零售排班
良木生香4 小时前
【鼠鼠优选算法-双指针】003:快乐数 & 004:盛水最多的容器
算法
Cx330❀4 小时前
【优选算法必刷100题】第41-42题(模拟):Z 字形变换,外观数列
c++·算法
沃尔特。4 小时前
直流无刷电机FOC控制算法
c语言·stm32·嵌入式硬件·算法
CW32生态社区4 小时前
CW32L012的PID温度控制——算法基础
单片机·嵌入式硬件·算法·pid·cw32