时序预测 | MATLAB实现PSO-SVM粒子群优化支持向量机时间序列预测

✅作者简介:热爱科研的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电子书和数学建模资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

matlab科研助手

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

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

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

打赏作者

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

抵扣说明:

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

余额充值