1 简介
支持向量机 (Support Vector Machines, SVM) 是一种应用广泛的机器学习方法, 具有理论知识清晰完备,适应性和泛化能力良好的优点, 核心思想是在特征空间中寻找到一个最优超平面将两类样本尽可能大的分开, 能够较好的处理小样本、非线性和克服“维数灾难”问题, 并且表现出优秀的分类能力和泛化能力而被广泛应用于分类和回归等领域. 但是 SVM 对核函数的参数选取对分类效果影响很大, 不合适的参数可能使得分类器性能大大降低. 针对 SVM 核参数的选取问题, 目前尚没有统一有效的方法. 传统的参数选择方法如实验法、网格搜索法等由于耗时过长和不必要的验证流程等缺点, 更常用的方法是群智能算法如蚁群算法、遗传算法和粒子群算法等优化支持向量机核参数.粒子群算法由于算法结构简单、寻优能力相对较好, 近年来选择粒子群算法优化 SVM 参数成为研究热点之一.。
2 部分代码
clear;clc;close all;
%% load Data;
data=xlsread('SVM训练数据-改.xls','负荷明细数据','B3:B6602');
% 6600/24=275天
%上一天24个数据作为输入 预测下一天的24个数据
for i=1:274
X(i,:)=data((i-1)*24+1:i*24);
Y(i,:)=data(i*24+1:(i+1)*24);
end
% 归一化
[inputn,inputps]=mapminmax(X',0,1);
X=inputn';
[outputn,outputps]=mapminmax(Y',0,1);
Y=outputn';
%% 划分数据集
rand('state',0)
r=randperm(size(X,1));
ntrain =size(X,1)*0.5 ; % 50%的为训练集 剩下为测试集
Xtrain = X(r(1:ntrain),:); % 训练集输入
Ytrain = Y(r(1:ntrain),:); % 训练集输出
Xtest = X(r(ntrain+1:end),:); % 测试集输入
Ytest = Y(r(ntrain+1:end),:); % 测试集输出
%% 没优化的24输出msvm
% 随机产生惩罚参数与核参数
C = 1000*rand;%惩罚参数
par = 1000*rand;%核参数
ker = 'rbf';
tol = 1e-20;
Ypredtest_pso = Ktest*Beta;
% 误差
pso_mse_test=sum(sum((Ypredtest_pso-Ytest).^2))/(size(Ytest,1)*size(Ytest,2))
% 反归一化
yuce_pso=mapminmax('reverse',Ypredtest_pso',outputps);yuce_pso=yuce_pso';
%% 画图
figure
plot(trace)
xlabel('迭代次数')
ylabel('适应度值')
title('psosvm适应度曲线(寻优曲线)')
%画出测试集中最后一天的数据(由于是随机划分的,因此并不是代表12月份最后一天)
img =gcf; %获取当前画图的句柄
print(img, '-dpng', '-r600', './img3.png')
figure;hold on;grid on;axis([0 23 -inf inf]);t=0:1:23;
plot(t,yuce(end,:),'-r*')
plot(t,zhenshi(end,:),'-ks')
legend('预测值','真实值')
title('优化前');xlabel('时刻');ylabel('负荷')
img =gcf; %获取当前画图的句柄
print(img, '-dpng', '-r600', './img2.png')
figure;hold on;grid on;axis([0 23 -inf inf]);t=0:1:23;
plot(t,yuce_pso(end,:),'-r*')
plot(t,zhenshi(end,:),'-ks')
legend('预测值','真实值')
title('优化后');xlabel('时刻');ylabel('负荷')
img =gcf; %获取当前画图的句柄
print(img, '-dpng', '-r600', './img1.png')
%合并出一个图
figure;hold on;grid on;t=0:1:23;axis([0 23 -inf inf])
plot(t,yuce(end,:),'-bp')
plot(t,yuce_pso(end,:),'-r*')
plot(t,zhenshi(end,:),'-ks')
legend('svm预测值','psosvm预测值','真实值')
title('优化前后');xlabel('时刻');ylabel('负荷')
img =gcf; %获取当前画图的句柄
print(img, '-dpng', '-r600', './img.png') %即可得到对应格式和期望dpi的图像
save data_svm_psosvm
3 仿真结果
4 参考文献
[1]康操, and 刘洋. "基于改进的PSO算法LS—SVM模型的短期电力负荷预测模型的研究." 经济技术协作信息 12(2015):1.