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

相关推荐
tedcloud12314 分钟前
UI-TARS-desktop部署教程:构建AI桌面自动化系统
服务器·前端·人工智能·ui·自动化·github
曦月逸霜3 小时前
啥是RAG 它能干什么?
人工智能·python·机器学习
AI医影跨模态组学3 小时前
Lancet Digit Health(IF=24.1)广东省人民医院刘再毅&南方医科大学南方医院梁莉等团队:基于可解释深度学习模型预测胶质瘤分子改变
人工智能·深度学习·论文·医学·医学影像·影像组学
应用市场3 小时前
AI 编程助手三强争霸(2026 版):Claude、Gemini、GPT 各自擅长什么?
人工智能·gpt
浅念-3 小时前
递归解题指南:LeetCode经典题全解析
数据结构·算法·leetcode·职场和发展·排序算法·深度优先·递归
CSND7403 小时前
YOLO resume断点续训(不能用官方的权重,是自己训练一半生成的last.pt)
深度学习·yolo·机器学习
Kiling_07043 小时前
Java集合进阶:Set与Collections详解
算法·哈希算法
AC赳赳老秦3 小时前
供应链专员提效:OpenClaw自动跟踪物流信息、更新库存数据,异常自动提醒
java·大数据·服务器·数据库·人工智能·自动化·openclaw
脑极体3 小时前
从Token消耗到DAA增长,AI价值标尺正在重构
人工智能·重构
csdn小瓯4 小时前
LangGraph自适应工作流路由机制:从关键词匹配到智能决策的完整实现
人工智能·fastapi·langgraph