✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
为提高基于支持向量机(SVM)的时间序列预测方法的泛化能力与预测精度,研究了一种基于粒子群优化(PSO)的LSSVM.该方法以交叉验证误差为评价准则,利用PSO对多个具有不同超参数的SVM进行基于迭代进化的优化选择,并以交叉验证误差最小的SVM作为最终优化后的SVM.时间序列预测实例表明,经PSO优化后的SVM的预测精度高于未经优化的LSSVM与传统时间序列预测方法的预测精度.
⛄ 部分代码
function [fit_gen,global_fitness,global_x ]=PSO(popcmax,popcmin,maxgen,sizepop,popgmax,popgmin,train_x,train_yy,type,kernel,proprecess,test_x,test_y,miny,maxy,train_y,wVmax,wVmin,c1,c2,Vcmin,Vcmax,Vgmax,Vgmin)
%% 产生初始粒子和速度
for i=1:sizepop
% 随机产生种群
pop(i,1) = (popcmax-popcmin)*rand(1,1)+popcmin ; % 初始种群
pop(i,2) = (popgmax-popgmin)*rand(1,1)+popgmin;
V(i,1)=Vcmax*rands(1,1); % 初始化速度
V(i,2)=Vgmax*rands(1,1);
fitness(i)=fobj(pop(i,:),train_x,train_yy,type,kernel,proprecess,test_x,test_y,miny,maxy,train_y);%计算目标适应度函数
end
% 找极值和极值点
[global_fitness bestindex]=min(fitness); % 全局极值
local_fitness=fitness; % 个体极值初始化
global_x=pop(bestindex,:); % 全局极值点
local_x=pop; % 个体极值点初始化
% 每一代种群的平均适应度
avgfitness_gen = zeros(1,maxgen);
%% 迭代寻优
for i=1:maxgen
i
for j=1:sizepop
%速度更新
%wV =wVmax-(wVmax-wVmin)/maxgen/maxgen*i*i 二次递减策略
wV =wVmax-(wVmax-wVmin)/maxgen*i ; %线性递减策略
% wV = 1; % wV best belongs to [0.8,1.2]为速率更新公式中速度前面的弹性系数,上一个速度/位置对当前速度/位置的影响
V(j,:) = wV*V(j,:) + c1*rand*(local_x(j,:) - pop(j,:)) + c2*rand*(global_x - pop(j,:));
if V(j,1) > Vcmax %以下几个不等式是为了限定速度在最大最小之间
V(j,1) = Vcmax;
end
if V(j,1) < Vcmin
V(j,1) = Vcmin;
end
if V(j,2) > Vgmax
V(j,2) = Vgmax;
end
if V(j,2) < Vgmin
V(j,2) = Vgmin; %以上几个不等式是为了限定速度在最大最小之间
end
%种群更新
wP = 1; % wP:初始为1,种群更新公式中速度前面的弹性系数
pop(j,:)=pop(j,:)+wP*V(j,:);
if pop(j,1) > popcmax %以下几个不等式是为了限定 c 在最大最小之间
pop(j,1) = popcmax;
end
if pop(j,1) < popcmin
pop(j,1) = popcmin;
end
if pop(j,2) > popgmax %以下几个不等式是为了限定 g 在最大最小之间
pop(j,2) = popgmax;
end
if pop(j,2) < popgmin
pop(j,2) = popgmin;
end
% 自适应粒子变异
if rand>0.5
k=ceil(2*rand);%ceil 是向离它最近的大整数圆整
if k == 1
pop(j,k) = (20-1)*rand+1;
end
if k == 2
pop(j,k) = (popgmax-popgmin)*rand+popgmin;
end
fitness(j)=fobj(pop(j,:),train_x,train_yy,type,kernel,proprecess,test_x,test_y,miny,maxy,train_y);%计算目标适应度函数
end
%个体最优更新
if fitness(j) < local_fitness(j)
local_x(j,:) = pop(j,:);
local_fitness(j) = fitness(j);
end
if fitness(j) == local_fitness(j) && pop(j,1) < local_x(j,1)
local_x(j,:) = pop(j,:);
local_fitness(j) = fitness(j);
end
%群体最优更新
if fitness(j) < global_fitness
global_x = pop(j,:);
global_fitness = fitness(j);
end
if abs( fitness(j)-global_fitness )<=eps && pop(j,1) < global_x(1)
global_x = pop(j,:);
global_fitness = fitness(j);
end
end
fit_gen(i)=global_fitness;
avgfitness_gen(i) = sum(fitness)/sizepop;
%if global_fitness<0.00005%设定终止条件,避免网络过度训练,影响推广能力。
%break;
%end
end
⛄ 运行结果
⛄ 参考文献
[1]朱伟李楠石超峰. 基于粒子群算法优化支持向量机的铁路客运量预测模型[J]. 商丘师范学院学报, 2013, 000(012):33-35.
[2]张弦, 王宏力. 基于粒子群优化的最小二乘支持向量机在时间序列预测中的应用[J]. 中国机械工程, 2011, 22(21):5.
⛄ Matlab代码关注
❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料