首页 > 编程语言 >基于PSO优化的SVM数据预测算法matlab仿真

基于PSO优化的SVM数据预测算法matlab仿真

时间:2023-05-23 12:44:33浏览次数:60  
标签:SVM end option pop pso matlab fitness PSO

1.算法仿真效果

matlab2022a仿真结果如下:

 

 

 

 

 

2.算法涉及理论知识概要

         支持向量机(support vector machines, SVM)是二分类算法,所谓二分类即把具有多个特性(属性)的数据分为两类,目前主流机器学习算法中,神经网络等其他机器学习模型已经能很好完成二分类、多分类,学习和研究SVM,理解SVM背后丰富算法知识,对以后研究其他算法大有裨益;在实现SVM过程中,会综合利用之前介绍的一维搜索、KKT条件、惩罚函数等相关知识。本篇首先通过详解SVM原理,后介绍如何利用python从零实现SVM算法。

        实例中样本明显的分为两类,黑色实心点不妨为类别一,空心圆点可命名为类别二,在实际应用中会把类别数值化,比如类别一用1表示,类别二用-1表示,称数值化后的类别为标签。每个类别分别对应于标签1、还是-1表示没有硬性规定,可以根据自己喜好即可,需要注意的是,由于SVM算法标签也会参与数学运算,这里不能把类别标签设为0。

 

 

 

线性核:

主要用于线性可分的情况,我们可以看到特征空间到输入空间的维度是一样的,其参数少速度快,对于线性可分数据,其分类效果很理想

通常首先尝试用线性核函数来做分类,看看效果如何,如果不行再换别的

优点:方案首选、简单、可解释性强:可以轻易知道哪些feature是重要的

缺点:只能解决线性可分的问题

 

高斯核:

 

通过调控参数,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。

如果σ \sigmaσ选得很大的话,高次特征上的权重实际上衰减得非常快,所以实际上(数值上近似一下)相当于一个低维的子空间;

如果σ \sigmaσ选得很小,则可以将任意的数据映射为线性可分——当然,这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题。

优点:可以映射到无限维、决策边界更为多维、只有一个参数

缺点:可解释性差、计算速度慢、容易过拟合

 

多项式核

 

多项式核函数可以实现将低维的输入空间映射到高纬的特征空间,

但是多项式核函数的参数多

当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。

优点:可解决非线性问题、主观设置

缺点:多参数选择、计算量大

sigmoid核

 

采用sigmoid核函数,支持向量机实现的就是只包含一个隐层,激活函数为 Sigmoid 函数的神经网络。

应用SVM方法,隐含层节点数目(它确定神经网络的结构)、隐含层节点对输入节点的权值都是在设计(训练)的过程中自动确定的。

而且支持向量机的理论基础决定了它最终求得的是全局最优值而不是局部最小值,也保证了它对于未知样本的良好泛化能力而不会出现过学习现象。

如图, 输入层->隐藏层之间的权重是每个支撑向量,隐藏层的计算结果是支撑向量和输入向量的内积,隐藏层->输出层之间的权重是支撑向量对应的

 

3.MATLAB核心程序

 

Vcmax = pso_option.k*pso_option.popcmax;
Vcmin = -Vcmax ;
Vgmax = pso_option.k*pso_option.popgmax;
Vgmin = -Vgmax ;
%% 产生初始粒子和速度
for i=1:pso_option.sizepop
    % 随机产生种群和速度
    pop(i,1) = (pso_option.popcmax-pso_option.popcmin)*rand+pso_option.popcmin;
    pop(i,2) = (pso_option.popgmax-pso_option.popgmin)*rand+pso_option.popgmin;
    V(i,1)=Vcmax*rands(1,1);
    V(i,2)=Vgmax*rands(1,1);
    
    % 计算初始适应度
    fitness(i)=fit_function(pop(i,:),X,Y,Xt,Yt);
end
 
% 找极值和极值点
[global_fitness bestindex]=min(fitness); % 全局极值
local_fitness=fitness;   % 个体极值初始化
 
global_x=pop(bestindex,:);   % 全局极值点
local_x=pop;    % 个体极值点初始化
 
% 每一代种群的平均适应度
avgfitness_gen = zeros(1,pso_option.maxgen);
 
%% 迭代寻优
for i=1:pso_option.maxgen
    
    for j=1:pso_option.sizepop
        
        %速度更新
        V(j,:) = pso_option.wV*V(j,:) + pso_option.c1*rand*(local_x(j,:) - pop(j,:)) + pso_option.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
        
        %种群更新
        pop(j,:)=pop(j,:) + pso_option.wP*V(j,:);
        %边界判断
        if pop(j,1) > pso_option.popcmax
            pop(j,1) = pso_option.popcmax;
        end
        if pop(j,1) < pso_option.popcmin
            pop(j,1) = pso_option.popcmin;
        end
        if pop(j,2) > pso_option.popgmax
            pop(j,2) = pso_option.popgmax;
        end
        if pop(j,2) < pso_option.popgmin
            pop(j,2) = pso_option.popgmin;
        end
        
        % 自适应粒子变异
        if rand>0.8
            k=ceil(2*rand);
            if k == 1
                pop(j,k) = (pso_option.popgmax-pso_option.popgmin)*rand + pso_option.popgmin;
            end
            if k == 2
                pop(j,k) = (pso_option.popgmax-pso_option.popgmin)*rand + pso_option.popgmin;
            end
        end
        
        %适应度值
        fitness(j)=   fit_function(pop(j,:),X,Y,Xt,Yt);
        
        %个体最优更新
        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
    end
    
    fit_gen(i)=global_fitness;
    avgfitness_gen(i) = sum(fitness)/pso_option.sizepop;
end

 

  

 

标签:SVM,end,option,pop,pso,matlab,fitness,PSO
From: https://www.cnblogs.com/51matlab/p/17423610.html

相关文章

  • m基于MIMO-OFDM-LDPC-STBC的通信链路matlab误码率仿真
    1.算法仿真效果matlab2013b仿真结果如下:使用一个二值图进行测试,并加入不同的均衡算法进行对比:2.算法涉及理论知识概要LDPC码是麻省理工学院RobertGallager于1963年在博士论文中提出的一种具有稀疏校验矩阵的分组纠错码。几乎适用于所有的信道,因此成为编码界近年来的研究......
  • m基于MIMO-OFDM-LDPC-STBC的通信链路matlab误码率仿真
    1.算法仿真效果matlab2013b仿真结果如下:    使用一个二值图进行测试,并加入不同的均衡算法进行对比:  2.算法涉及理论知识概要          LDPC码是麻省理工学院RobertGallager于1963年在博士论文中提出的一种具有稀疏校验矩阵的分组纠错码。几乎......
  • m基于matlab的LDPC译码算法性能仿真,对比BP译码,最小和译码以及归一化偏移最小和译码
    1.算法仿真效果matlab2022a仿真结果如下:  2.算法涉及理论知识概要       LDPC码是麻省理工学院RobertGallager于1963年在博士论文中提出的一种具有稀疏校验矩阵的分组纠错码。几乎适用于所有的信道,因此成为编码界近年来的研究热点。它的性能逼近香农极限,且描述和......
  • MATLAB用GARCH-EVT-Copula极值理论模型VaR预测分析股票投资组合|附代码数据
    全文链接:http://tecdat.cn/?p=30426最近我们被客户要求撰写关于GARCH-EVT-Copula的研究报告,包括一些图形和统计输出。对VaR计算方法的改进,以更好的度量开放式基金的风险。本项目把基金所持股票看成是一个投资组合,引入Copula来描述多只股票间的非线性相关性,构建多元GARCH-EVT-Cop......
  • 基于matlab的LDPC译码算法误码率对比仿真,对比BP和BF译码
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要LDPC码是麻省理工学院RobertGallager于1963年在博士论文中提出的一种具有稀疏校验矩阵的分组纠错码。几乎适用于所有的信道,因此成为编码界近年来的研究热点。它的性能逼近香农极限,且描述和实现简单,易于进行理论分......
  • 基于matlab的LDPC译码算法误码率对比仿真,对比BP和BF译码
    1.算法仿真效果matlab2022a仿真结果如下: 2.算法涉及理论知识概要       LDPC码是麻省理工学院RobertGallager于1963年在博士论文中提出的一种具有稀疏校验矩阵的分组纠错码。几乎适用于所有的信道,因此成为编码界近年来的研究热点。它的性能逼近香农极限,且描述和实现......
  • m基于GRNN广义回顾神经网络的车牌字符分割和识别算法matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要车牌识别系统(VehicleLicensePlateRecognition,VLPR)是计算机视频图像识别技术在车辆牌照识别中的一种应用。车牌识别在高速公路车辆管理中得到广泛应用,电子收费(ETC)系统中,也是结合DSRC技术识别车辆身份的主要手......
  • m基于PCA-SA低纬紧致姿态空间学习算法的单目视频人体姿态提取matlab仿真
    1.算法仿真效果matlab2013b仿真结果如下:2.算法涉及理论知识概要介绍了运动人体的剪影提取,在视频序列中,由于受到复杂背景、遮挡、光照变化等因素的影响,通常的背景分离算法无法有效的对运动人体进行提取,本文介绍了一种基于高斯混合模型和帧差法相结合的运动目标提取算法,从......
  • m基于马尔科夫随机场和Gardner环的WSN网络时间同步matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:RBS算法的累积误差在50us大于80%;ERBS算法的累积误差在25us大于80%;本文所提出的MRF-MAP-GardnerERBS算法的累积误差在10us大于80%。因此,在降低同步误差方面,MRF-MAP-GardnerERBS算法性能优于RBS算法和ERBS算法。RBS算法的同步误......
  • m基于PCA-SA低纬紧致姿态空间学习算法的单目视频人体姿态提取matlab仿真
    1.算法仿真效果matlab2013b仿真结果如下:              2.算法涉及理论知识概要           介绍了运动人体的剪影提取,在视频序列中,由于受到复杂背景、遮挡、光照变化等因素的影响,通常的背景分离算法无法有效的对运动人体......