✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
近年来,电能质量问题已经成为当今电力工程领域里亟待解决的问题,而电力系统故障诊断分类是改善电能质量和保护电力系统的一个重要环节. 根据电力负荷特性的变化规律,考虑了日期类型、温度、天气情况等影响负荷预测的因素,本文提出将EMD-支持向量机算法应用于电力系统短期负荷预测。.采用EMD将传输线电压信号分解成有限个本征模函数(IMF);结果表明EMD-支持向量机算法比其他预测方法精确等级更高,可靠性更强,合理性和实用性都更强,取得了很好的预测结果。
⛄ 部分代码
function [mse,bestc,bestg] = SVMcgForRegress(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,msestep,kerneltype) %v,cstep这些不写的话就是默认值
%
% 利用网格搜索与交叉验证进行核参数与惩罚参数选择
% cmin cmax c的取值范围
% gmin gmax g的取值范围
% v 就是交叉验证参数 一般是5折交叉验证
% cstep gstep 网格取值的步长
% msestep 误差的步长 只是为了最后画等高线图用一用,这样比较好看
% kerneltype=0(线性核) 1(多项式核) 2(rbf核函数) 3(sigmoid核函数)
[X,Y] = meshgrid(cmin:cstep:cmax,gmin:gstep:gmax);
[m,n] = size(X);
cg = zeros(m,n);
eps = 10^(-4);
bestc = 0;
bestg = 0;
mse = Inf;
basenum = 2;
for i = 1:m %每更改一组c g值,跑5折交叉验证 最终选择精度最高的那一组c g
for j = 1:n
cmd = ['-v ',num2str(v),' -c ',num2str( basenum^X(i,j) ),' -g ',num2str( basenum^Y(i,j) ),' -s 3 -t ',num2str(kerneltype),' -p 0.1 -d 1'];
cg(i,j) = svmtrain(train_label, train, cmd);
if cg(i,j) < mse
mse = cg(i,j);
bestc = basenum^X(i,j);
bestg = basenum^Y(i,j);
end
if abs( cg(i,j)-mse )<=eps && bestc > basenum^X(i,j)
mse = cg(i,j);
bestc = basenum^X(i,j);
bestg = basenum^Y(i,j);
end
end
end %选择误差最接近的0的c,g。当存在多组c,g,就选择最小的那组cg
% to draw the acc with different c & g
[cg,ps] = mapminmax(cg,0,1);
%%
% figure;
% [C,h] = contour(X,Y,cg,0:msestep:0.5);%contour的作用就是画等高线
% clabel(C,h,'FontSize',10,'Color','r');
% xlabel('log2c','FontSize',12);
% ylabel('log2g','FontSize',12);
% firstline = 'SVR参数选择结果图(等高线图)[GridSearchMethod]';
% secondline = ['Best c=',num2str(bestc),' g=',num2str(bestg), ...
% ' CVmse=',num2str(mse)];
% title({firstline;secondline},'Fontsize',12);
% grid on;
%
% figure;
% meshc(X,Y,cg); %meshc就是比mesh的3d图在底层(Z=0)多了等高线而已
% % mesh(X,Y,cg);
% % surf(X,Y,cg);
% axis([cmin,cmax,gmin,gmax,0,1]);
% xlabel('log2c','FontSize',12);
% ylabel('log2g','FontSize',12);
% zlabel('MSE','FontSize',12);
% firstline = 'SVR参数选择结果图(3D视图)[GridSearchMethod]';
% secondline = ['Best c=',num2str(bestc),' g=',num2str(bestg), ...
% ' CVmse=',num2str(mse)];
% title({firstline;secondline},'Fontsize',12);
⛄ 运行结果
⛄ 参考文献
[1] 于洋. 基于EMD的SVM支持向量机模型在朝阳旱灾预测中的应用[J]. 江西水利科技, 2022(005):048.
[2] 何婷, 乔俊强, 包建勤,等. 基于EMD和SVM的电力系统故障分类识别[J]. 仪表技术, 2022(004):000.
[3] 尹立, 胡兆光, 韩新阳,等. 基于支持向量机的电力负荷预测研究[C]// 中国高等学校电力系统及其自动化专业学术年会. 2014.