粒子群算法优化SVM的核参数

article/2025/9/23 9:46:33

更新一下:以下代码是优化高斯核函数的惩罚因子和g参数的。因为在svmtrain函数中没有给-v赋值,所以是默认值2,若要优化其他核函数,可以修改svmtrain中的-v参数的值以及增加其他参数的粒子更新代码。此代码的目标函数是svmtrain三折交叉验证返回的准确率,读者可根据实际情况做修改。

粒子群算法是模拟鸟群觅食过程中的迁徙和群集行为时提出的一种基于群体智能的优化算法。粒子群算法是一种随机全局优化技术,通过粒子间的相互作用发现复杂搜索空间中的最优区域。用粒子群算法优化支持向量机的结构参数,可以快速收敛寻得最优解,提高支持向量机的学习能力。在粒子群算法中,可以把所有的优化问题的解想象为D维搜索空间上的一个点,而这个点就是一个“粒子”。通过目标函数来评估当前粒子所处位置的好坏,得到相应的适应度值。在种群中粒子的随机初始化形成后,会按照某种方式进行迭代,直到终止条件符合要求,从而寻得最优解。
基于粒子群算法的支持向量机参数选择的具体步骤如下:
(1)设置待优化的惩罚因子C和核参数γ的取值范围,以及参数局部搜索能力、种群最大数量等其他初始化参数。
(2)在惩罚因子C和核参数γ的取值范围随机初始化一群粒子。初始化每个粒子的位置信息和速度信息,然后将每个粒子的历史最优位置[Pbest]_i设为当前位置,群体中最好粒子的当前位置设为Gbest。
(3)将样本数据的回归误差作为目标函数,计算每个粒子的适应度。
(4)对每个粒子,若其适应度值优于上一轮的历史最优值,就是当前位置取代历史最优位置,成为新的[Pbest]_i。
(5)对每个粒子,若其适应度值优于上一轮的全局最优适应度值,就用当前位置取代全局最优位置,成为新的Gbest。
(6)按照以下公式分别对粒子的速度和位置进行更新。
在这里插入图片描述

(7)判读是否满足终止条件,满足时则停止运算,否则返回步骤(3)继续迭代。

function [bestCVaccuarcy,bestc,bestg,pso_option] = psoSVMcgForClass(train_label,train,pso_option)
% psoSVMcgForClass
%% 参数初始化
if nargin == 2   %当输入两个参数时执行下面的语句pso_option = struct('c1',1.5,'c2',1.7,'maxgen',200,'sizepop',20, ...'k',0.6,'wV',1,'wP',1,'v',3, ...'popcmax',10^4,'popcmin',10^(-1),'popgmax',10^3,'popgmin',10^(-2));
end
% c1:初始为1.5,pso参数局部搜索能力
% c2:初始为1.7,pso参数全局搜索能力
% maxgen:初始为200,最大进化数量
% sizepop:初始为20,种群最大数量
% k:初始为0.6(k belongs to [0.1,1.0]),速率和x的关系(V = kX)
% wV:初始为1(wV best belongs to [0.8,1.2]),速率更新公式中速度前面的弹性系数
% wP:初始为1,种群更新公式中速度前面的弹性系数
% v:初始为3,SVM Cross Validation参数
% popcmax:初始为100,SVM 参数c的变化的最大值.
% popcmin:初始为0.1,SVM 参数c的变化的最小值.
% popgmax:初始为1000,SVM 参数g的变化的最大值.
% popgmin:初始为0.01,SVM 参数c的变化的最小值.Vcmax = pso_option.k*pso_option.popcmax;
Vcmin = -Vcmax ;
Vgmax = pso_option.k*pso_option.popgmax;
Vgmin = -Vgmax ;eps = 1e-1;%% 产生初始粒子和速度
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);% 计算初始适应度cmd = ['-v ',num2str(pso_option.v),' -c ',num2str( pop(i,1) ),' -g ',num2str( pop(i,2) )];fitness(i) = svmtrain(train_label, train, cmd);    %保存的是三折交叉验证的准确率fitness(i) = -fitness(i);
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.maxgenfor 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,:));%较大的ω使粒子更易跳出局部最优解,获得更强的全局寻优能力,但也会使效率降低,不宜收敛;较小的ω容易陷入局部最优解,但更易收敛。%c1=0时,为无私型粒子群算法,丧失群体多样性,容易陷入局部最优解。%c2=0时,为自私型粒子群算法,没有信息的社会共享,收敛速度减慢。%粒子最大速度:维护算法探索能力和开发能力的平衡。速度增大,粒子的探索能力增强,但容易飞过最优解。速度减小,开发能力较大,但容易陷入局部最优。if V(j,1) > VcmaxV(j,1) = Vcmax;endif V(j,1) < VcminV(j,1) = Vcmin;endif V(j,2) > VgmaxV(j,2) = Vgmax;endif V(j,2) < VgminV(j,2) = Vgmin;end%种群更新pop(j,:)=pop(j,:) + pso_option.wP*V(j,:);if pop(j,1) > pso_option.popcmaxpop(j,1) = pso_option.popcmax;endif pop(j,1) < pso_option.popcminpop(j,1) = pso_option.popcmin;endif pop(j,2) > pso_option.popgmaxpop(j,2) = pso_option.popgmax;endif pop(j,2) < pso_option.popgminpop(j,2) = pso_option.popgmin;end% 自适应粒子变异if rand>0.5k=ceil(2*rand);if k == 1pop(j,k) = (20-1)*rand+1;endif k == 2pop(j,k) = (pso_option.popgmax-pso_option.popgmin)*rand + pso_option.popgmin;endend%适应度值cmd = ['-v ',num2str(pso_option.v),' -c ',num2str( pop(j,1) ),' -g ',num2str( pop(j,2) )];fitness(j) = svmtrain(train_label, train, cmd);fitness(j) = -fitness(j);cmd_temp = ['-c ',num2str( pop(j,1) ),' -g ',num2str( pop(j,2) )];model = svmtrain(train_label, train, cmd_temp);if fitness(j) >= -65continue;end%个体最优更新if fitness(j) < local_fitness(j)local_x(j,:) = pop(j,:);local_fitness(j) = fitness(j);endif abs( fitness(j)-local_fitness(j) )<=eps && pop(j,1) < local_x(j,1)local_x(j,:) = pop(j,:);local_fitness(j) = fitness(j);end%群体最优更新if fitness(j) < global_fitnessglobal_x = pop(j,:);global_fitness = fitness(j);endif abs( fitness(j)-global_fitness )<=eps && pop(j,1) < global_x(1)global_x = pop(j,:);global_fitness = fitness(j);endendfit_gen(i) = global_fitness;avgfitness_gen(i) = sum(fitness)/pso_option.sizepop;
end%% 结果分析
figure;
hold on;
plot(-fit_gen,'r*-','LineWidth',1.5);
plot(-avgfitness_gen,'o-','LineWidth',1.5);
legend('最佳适应度','平均适应度',3);
xlabel('进化代数','FontSize',12);
ylabel('适应度','FontSize',12);
grid on;bestc = global_x(1);
bestg = global_x(2);
bestCVaccuarcy = -fit_gen(pso_option.maxgen);line1 = '适应度曲线Accuracy[PSOmethod]';
line2 = ['(参数c1=',num2str(pso_option.c1), ...',c2=',num2str(pso_option.c2),',终止代数=', ...num2str(pso_option.maxgen),',种群数量pop=', ...num2str(pso_option.sizepop),')'];
% line3 = ['Best c=',num2str(bestc),' g=',num2str(bestg), ...
%     ' CVAccuracy=',num2str(bestCVaccuarcy),'%'];
% title({line1;line2;line3},'FontSize',12);
title({line1;line2},'FontSize',12);

效果图如下
在这里插入图片描述


http://chatgpt.dhexx.cn/article/moXCJRa4.shtml

相关文章

粒子群算法优化的OTSU图像分割

文章目录 1 基本概念2 算法实现3 算法优化举例4 算法构成要素分析5算法优缺点分析6 算法图像分割中应用 1 基本概念 粒子群优化算法&#xff08;PSO&#xff09;&#xff1a;它是进化算法的一种&#xff0c;它源于鸟群捕食的行为研究&#xff0c;基本思想是通过群体中个体之间…

【机器学习】K-Means算法优化

K-Means算法优化 学习目标1. Canopy算法配合初始聚类1.1 Canopy算法配合初始聚类实现流程1.2 Canopy算法的优缺点 2. K-means3. 二分k-means4. k-medoids&#xff08;k-中心聚类算法&#xff09;5. Kernel k-means6. ISODATA7. Mini Batch K-Means8. 小结 学习目标 知道K-mean…

鲸鱼算法优化PID参数优化附matlab代码

第一 章 鲸鱼优化算法 算法介绍参考文献:Seyedali Mirjalili,Andrew Lewis. The Whale Optimization Algorithm[J]. Advances in Engineering Software,2016,95. 第二章 鲸鱼优化PID参数 首先我们需要建立一个直流电机PID控制系统&#xff0c;WOA算法通过将系统上的误差作为…

麻雀优化算法 优化XGBoost的参数 python代码

文章目录 麻雀优化算法麻雀优化算法的改进加入Ten混沌序列 XGBoost原理麻雀优化算法优化XGBoost参数范围部分代码画图 优化结果评价结果和运行时间适应度曲线训练集结果测试集结果 麻雀优化算法 麻雀优化算法是2020年提出来的&#xff0c;该算法利用麻雀的角色分工和协作机制高…

KNN算法优化

在之前所写的KNN算法python实现里&#xff0c;KNN对k的选取很敏感&#xff0c;因为它给所有的近邻分配相同权重&#xff0c;无论距离测试样本有多远。为了降低该敏感性&#xff0c;可以使用加权KNN&#xff0c;给更近的近邻分配更大的权重&#xff0c;给较远的样本权重相应减少…

【常见的优化算法介绍】

常见的优化算法介绍 1. 批量梯度下降算法&#xff08;batch gradient descent BGD&#xff09; 每次迭代都需要把所有样本都送入&#xff0c;这样的好处是每次迭代都顾及了全部的样本&#xff0c;做的是全局最优化,但是有可能达到局部最优。 2. 随机梯度下降算法&#xff08;…

常用优化算法介绍

作者:Walker 在机器学习的世界中,通常我们会发现有很多问题并没有最优的解,或是要计算出最优的解要花费很大的计算量,面对这类问题一般的做法是利用迭代的思想尽可能的逼近问题的最优解。我们把解决此类优化问题的方法叫做优化算法,优化算法本质上是一种数学方法,常见的…

十大经典算法及其优化

本文转自&#xff1a;https://blog.csdn.net/qq_40803710/article/details/80642703 算法概述 0.1 算法分类 十种常见排序算法可以分为两大类&#xff1a; 非线性时间比较类排序&#xff1a;通过比较来决定元素间的相对次序&#xff0c;由于其时间复杂度不能突破O(nlogn)&#…

虚拟机里CDlinux 里的水滴 minidwep-gtk

假如什么都没有使用虚拟机打开这个系统&#xff0c;就搞这个 会显示 下方 表示 网卡 必须是3070 或者 8187的 网卡&#xff0c;自带的网卡是不支持的

CDLINUX——minidwep-gtk

1.下载CDLinux http://fastsoft.onlinedown.net/down/minidwep.zip 解压后是 2.使用虚拟机安装iso 注&#xff1a;版本选择“其他linux 2.6x内核” 安装参考&#xff1a;http://www.downza.cn/soft/12715.html 3.使用 使用参考&#xff1a;http://soft.onlinedown.net/s…

CDliux--minidwep 无线密码渗透测试

CDliux–minidwep 无线密码破解渗透测试 一. 工具准备 1.首先下载CDLinux 用虚拟机安装&#xff0c;教程有很多 CDLINUX&#xff1a;cdlinux 2.支持cdlinux 的无线网卡选择RT 3070/或者 RT8187 某宝上有很多 二.渗透测试 1.cdlinux 安装好后链接无线网卡 2.打开minidwep-gtk …

IPWorks S/MIME Delphi Edition

IPWorks S/MIME是一套用于电子邮件加密和文档安全的综合组件。IPWorks S/MIME使用公钥密码标准&#xff08;PKCS&#xff09;实现加密和解密的S/MIME标准。 IPWorks S/MIME包括通用的S/MIME组件以及支持S/MIME的IPWorks POP3、IMAP、SMTP、FileMailer和HTMLMailer组件版本。还…

MinIO客户端mc使用

官网&#xff1a; 英文网址&#xff08;最好查看英文网址&#xff09;&#xff1a;https://min.io/中文网址&#xff08;没有及时更新&#xff0c;容易被坑&#xff09;&#xff1a;http://www.minio.org.cn/ 使用的 minio 版本是&#xff1a;RELEASE.2021-11-* 一、MinIO 客…

MinIO的介绍以及简单的使用

什么是MinIO MinIO是在GUN Affero通用公共许可证 v3.0 下发布的高性能对象存储.他与AmazonS3云存储服务API兼容.使用MinIO为机器学习,分析和应用程序数据工作负载构建高性能基础架构. MinIO是一个高兴能的对象存储,什么是对象存储(Object Storage Service),对象存储是支持海量用…

【LWIP】stm32用CubeMX(6.4版)配置LwIP+Ping+TCPclient+TCPserver发送信息到PC(操作部分)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言零、更新&#xff08;2022.08.07&#xff09;一、实验平台二、手把手全程配置步骤1.配置电脑环境2.配置cubeMX3.配置MDK&#xff08;Keil5&#xff09;4.配置TC…

minicap介绍

从WEB 端批量移动设备管理控制工具 STF 的环境搭建和运行文章了解到STF这个工具&#xff0c;然后试用了一下。最近在做一个测试工具&#xff0c;发现Android原生的截图工具截图非常缓慢&#xff0c;然后想起了stf工具中截图非常快&#xff0c;甚至连执行monkey的动作都能在web端…

​ MinIO​使用

引言&#xff1a;为什么要使用minio MinIO是对象存储服务,它基于Apache License 开源协议&#xff0c;兼容Amazon S3云存储接口。适合存储非结构化数据&#xff0c;如图片&#xff0c;音频&#xff0c;视频&#xff0c;日志等。对象文件最大可以达到5TB。类似于腾讯的oss或者阿…

MiniApp Dev

小程序开发 MiniApp Dev 2_WinkeyTseng_YongTai的博客-CSDN博客 MiniApp Dev 3_WinkeyTseng_YongTai的博客-CSDN博客 MiniApp Dev 4_spencer_tseng的博客-CSDN博客

MinIO的简单实用(一)

一、什么是MinIO MinIO是在GNU Affero 通用公共许可证v3.0下发布的高性能对象存储。它与AmazonS3云存储服务API兼容。使用MinIO为机器学习、分析和应用程序工作负载构建高性能基础架构。 MinIO是高性能对象存储&#xff0c;什么是对象存储&#xff08;Object Storage Service&…

取代奶瓶Minidwep-gtk破解WPA 全攻略

原文地址为&#xff1a; 取代奶瓶Minidwep-gtk破解WPA 全攻略 取代奶瓶Minidwep-gtk 破 WPA 全攻略 目录 1、 CDlinux 下使用 minidwepgtk 获取握手包并使用自带的字典破解 2、 自带的字典破解不出密码时使用 U 盘外挂字典继续暴力破解密码 3、 将握手包拷贝到 Windows 系统下…