✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
个人主页:Matlab科研工作室
个人信条:格物致知。
短期负荷预测是电力系统调度和计划部门安排购电计划和制定运行方式的基础,是保障电力系统安全,经济运行的重要手段.支持向量机(Support Vector Machine, SVM)是近期提出的一种机器学习方法,它具有严格的数学理论基础,有着比人工神经网络更优越的性能.本文将SVM引入到短期负荷预测中,结合具体实例,验证了该方法的可行性和有效性. 论文首先综述了短期负荷预测的研究现状,归纳了常用的预测模型和方法,并分析了各种方法的优劣;接着详细介绍了SVM的理论基础和原理,推导了SVM的回归模型,之后将SVM引入到短期负荷预测,从预测流程,样本构造,参数选择,训练算法等方面进行了细致的研究;在此基础上,结合具体实例,选取基于日特征气象因素的支持向量机预测方法,用Matlab编制模型的算法程序,从数据集中选取若干天数的历史数据作为模型的训练集,其余的数据作为测试集,模型最终能够实现对测试集中不同日期的负荷大小预测.
⛄ 部分代码
function [mse,bestc,bestg] = SVMcgForRegress(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,msestep)
%SVMcg cross validation by faruto
%
% by faruto
%Email:[email protected] QQ:516667408 http://blog.sina.com.cn/faruto
%last modified 2011.06.08
%
% 若转载请注明:
% faruto and liyang , LIBSVM-farutoUltimateVersion
% a toolbox with implements for support vector machines based on libsvm, 2011.
% Software available at http://www.matlabsky.com
%
% Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for
% support vector machines, 2001. Software available at
% http://www.csie.ntu.edu.tw/~cjlin/libsvm
%% about the parameters of SVMcg
if nargin < 10
msestep = 0.06;
end
if nargin < 8
cstep = 0.8;
gstep = 0.8;
end
if nargin < 7
v = 5;
end
if nargin < 5
gmax = 8;
gmin = -8;
end
if nargin < 3
cmax = 8;
cmin = -8;
end
%% X:c Y:g cg:acc
[X,Y] = meshgrid(cmin:cstep:cmax,gmin:gstep:gmax);
[m,n] = size(X);
cg = zeros(m,n);
eps = 10^(-4);
%% record acc with different c & g,and find the bestacc with the smallest c
bestc = 0;
bestg = 0;
mse = Inf;
basenum = 2;
for i = 1:m
for j = 1:n
cmd = ['-v ',num2str(v),' -c ',num2str( basenum^X(i,j) ),' -g ',num2str( basenum^Y(i,j) ),' -s 3 -p 0.01'];
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
%% 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);
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);
% 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]蔡勇. 基于支持向量机的短期电力负荷预测研究[D]. 华中科技大学, 2007.
[2]封磊. 基于"三峰三谷"变化趋势的电力负荷预测方法研究.