​【预测模型】基于粒子群算法改进SVM实现多输入多输出预测Matlab代码

​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.

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值