利用PSO优化SVM
基于PSO优化LS-SVM的异步电动机振动故障诊断

位置振动信号 的特征频率作 为系统的输入 , 然后利用训练好的粒子群算 法优 化后的 最小二乘 支持 向量机 进行异步 电动机 振动的故 障诊 断。最终结果与其他诊 断方法对 比表明 : 该方法克服 了样本训练 时间较 长并容 易陷入局部收敛的缺点 , 同时 诊断的准确率较 高, 有效地避免 了异步 电动机 故障的误诊断。 关键 词: 异步电动机 ; 振动 ; 故障诊断 ; 粒子群算法 ; 最小二乘支持 向量机
作 者 简 介 : 建辉 (9 4一) 男 , 士 研 究 生 , 要 研 究 方 向 为 电力 设 备 状 态检 测 与 故 障 诊 断 。 薛 18 , 硕 主
通过对 三相 鼠笼式 异步 电机 常见 故 障机 理分 析 可 知 鼠笼式 异 步 电 动机 的主 要 故 障 为 :定 子 匝 间短 路 、 转 子断条和气 隙偏 心 。在 以往 的异 步 电动 机 故 障监 测 与诊 断系统 中 ,多数是 利用算 法诊 断 ,且监测 量单一 。 但是 异步 电动机 故 障时 谐波 成 分相 当丰 富 ,故 分 类 和 识别工作 复杂 。 目前 国 内许 多专 家学 者 提 出 了多 种方 法对异 步 电动机 的故 障进 行 诊 断 ,文献 [ ] 出 了基 2提
于小波分 析 的电机 故 障振 声 诊 断方 法 ,可 以有效 地 检
收敛 ,且 能通过 故 障信号 准 确判 断 出异 步 电动 机 的各
类 故障 。 1 P O算法 S P O是 由 K n e y和 E ehr 等人 于 19 S en d b ra t 9 5年提 出 的一种 基 于群 体 、 自适 应 的进 化算 法 。P O算法是 一 S 种线性 搜索算法 , 因为其 简单 、 实现方便 , 因此 自从提 出 以来便在 短期 内迅速得 到 国际计 算领域 的认可 , 并在模 式识 别领域 取得 了广泛 的发展 。
PSO参数优化

1.利用PSO参数寻优函数(分类问题):psoSVMcgForClass2.[bestCVaccuracy,bestc,bestg,pso_option]=3.psoSVMcgForClass(train_label,train,pso_option)4.输入:5.train_label:训练集的标签,格式要求与svmtrain相同。
6.train:训练集,格式要求与svmtrain相同。
7.pso_option:PSO中的一些参数设置,可不输入,有默认值,详细请看代码的帮助说明。
8.输出:9.bestCVaccuracy:最终CV意义下的最佳分类准确率。
10.bestc:最佳的参数c。
11.bestg:最佳的参数g。
12.pso_option:记录PSO中的一些参数。
13.==========================================================14.利用PSO参数寻优函数(回归问题):psoSVMcgForRegress15.[bestCVmse,bestc,bestg,pso_option]=16.psoSVMcgForRegress(train_label,train,pso_option)17.其输入输出与psoSVMcgForClass类似,这里不再赘述。
复制代码psoSVMcgForClass源代码:1.function [bestCVaccuarcy,bestc,bestg,pso_option] =psoSVMcgForClass(train_label,train,pso_option)2.% psoSVMcgForClass3.4.%%5.% by faruto6.%Email:patrick.lee@ QQ:516667408/faruto BNU7.%last modified 2010.01.178.9.%% 若转载请注明:10.% faruto and liyang , LIBSVM-farutoUltimateVersion11.% a toolbox with implements for support vector machines based on libsvm,2009.12.%13.% Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for14.% support vector machines, 2001. Software available at15.% .tw/~cjlin/libsvm16.%% 参数初始化17.if nargin == 218. pso_option =struct('c1',1.5,'c2',1.7,'maxgen',200,'sizepop',20, ...19. 'k',0.6,'wV',1,'wP',1,'v',5, ...20. 'popcmax',10^2,'popcmin',10^(-1),'popgmax',10^3,'popgmin',10^(-2));21.end22.% c1:初始为1.5,pso参数局部搜索能力23.% c2:初始为1.7,pso参数全局搜索能力24.% maxgen:初始为200,最大进化数量25.% sizepop:初始为20,种群最大数量26.% k:初始为0.6(k belongs to [0.1,1.0]),速率和x的关系(V = kX)27.% wV:初始为1(wV best belongs to [0.8,1.2]),速率更新公式中速度前面的弹性系数28.% wP:初始为1,种群更新公式中速度前面的弹性系数29.% v:初始为3,SVM Cross Validation参数30.% popcmax:初始为100,SVM 参数c的变化的最大值.31.% popcmin:初始为0.1,SVM 参数c的变化的最小值.32.% popgmax:初始为1000,SVM 参数g的变化的最大值.33.% popgmin:初始为0.01,SVM 参数c的变化的最小值.34.35.Vcmax = pso_option.k*pso_option.popcmax;36.Vcmin = -Vcmax ;37.Vgmax = pso_option.k*pso_option.popgmax;38.Vgmin = -Vgmax ;39.40.eps = 10^(-3);41.42.%% 产生初始粒子和速度43.for i=1:pso_option.sizepop44.45. % 随机产生种群和速度46. pop(i,1) =(pso_option.popcmax-pso_option.popcmin)*rand+pso_option.popcmin; 47. pop(i,2) =(pso_option.popgmax-pso_option.popgmin)*rand+pso_option.popgmin;48. V(i,1)=Vcmax*rands(1,1);49. V(i,2)=Vgmax*rands(1,1);50.51. % 计算初始适应度52. cmd = ['-v ',num2str(pso_option.v),' -c ',num2str( pop(i,1) ),' -g',num2str( pop(i,2) )];53. fitness(i) = svmtrain(train_label, train, cmd);54. fitness(i) = -fitness(i);55.end56.57.% 找极值和极值点58.[global_fitness bestindex]=min(fitness); % 全局极值59.local_fitness=fitness; % 个体极值初始化60.61.global_x=pop(bestindex,:); % 全局极值点62.local_x=pop; % 个体极值点初始化63.64.% 每一代种群的平均适应度65.avgfitness_gen = zeros(1,pso_option.maxgen);66.67.%% 迭代寻优68.for i=1:pso_option.maxgen69.70. for j=1:pso_option.sizepop71.72. %速度更新73. V(j,:) = pso_option.wV*V(j,:) +pso_option.c1*rand*(local_x(j,:) - pop(j,:)) +pso_option.c2*rand*(global_x - pop(j,:));74. if V(j,1) > Vcmax75. V(j,1) = Vcmax;76. end77. if V(j,1) < Vcmin78. V(j,1) = Vcmin;79. end80. if V(j,2) > Vgmax81. V(j,2) = Vgmax;82. end83. if V(j,2) < Vgmin84. V(j,2) = Vgmin;85. end86.87. %种群更新88. pop(j,:)=pop(j,:) + pso_option.wP*V(j,:);89. if pop(j,1) > pso_option.popcmax90. pop(j,1) = pso_option.popcmax;91. end92. if pop(j,1) < pso_option.popcmin93. pop(j,1) = pso_option.popcmin;94. end95. if pop(j,2) > pso_option.popgmax96. pop(j,2) = pso_option.popgmax;97. end98. if pop(j,2) < pso_option.popgmin99. pop(j,2) = pso_option.popgmin;100. end102. % 自适应粒子变异103. if rand>0.5104. k=ceil(2*rand);105. if k == 1106. pop(j,k) = (20-1)*rand+1;107. end108. if k == 2109. pop(j,k) =(pso_option.popgmax-pso_option.popgmin)*rand + pso_option.popgmin; 110. end111. end112.113. %适应度值114. cmd = ['-v ',num2str(pso_option.v),' -c',num2str( pop(j,1) ),' -g ',num2str( pop(j,2) )];115. fitness(j) = svmtrain(train_label, train, cmd);116. fitness(j) = -fitness(j);117.118. cmd_temp = ['-c ',num2str( pop(j,1) ),' -g ',num2str( pop(j,2) )];119. model = svmtrain(train_label, train, cmd_temp);120.121. if fitness(j) >= -65122. continue;123. end124.125. %个体最优更新126. if fitness(j) < local_fitness(j)127. local_x(j,:) = pop(j,:);128. local_fitness(j) = fitness(j);129. end130.131. if abs( fitness(j)-local_fitness(j) )<=eps && pop(j,1) < local_x(j,1)132. local_x(j,:) = pop(j,:);133. local_fitness(j) = fitness(j);134. end135.136. %群体最优更新137. if fitness(j) < global_fitness138. global_x = pop(j,:);139. global_fitness = fitness(j);140. end142. if abs( fitness(j)-global_fitness )<=eps && pop(j,1) < global_x(1)143. global_x = pop(j,:);144. global_fitness = fitness(j);145. end146.147. end148.149. fit_gen(i) = global_fitness;150. avgfitness_gen(i) = sum(fitness)/pso_option.sizepop;151.end152.153.%% 结果分析154.figure;155.hold on;156.plot(-fit_gen,'r*-','LineWidth',1.5);157.plot(-avgfitness_gen,'o-','LineWidth',1.5);158.legend('最佳适应度','平均适应度',3);159.xlabel('进化代数','FontSize',12);160.ylabel('适应度','FontSize',12);161.grid on;162.163.% print -dtiff -r600 pso164.165.bestc = global_x(1);166.bestg = global_x(2);167.bestCVaccuarcy = -fit_gen(pso_option.maxgen);168.169.line1 = '适应度曲线Accuracy[PSOmethod]';170.line2 = ['(参数c1=',num2str(pso_option.c1), ...171. ',c2=',num2str(pso_option.c2),',终止代数=', ...172. num2str(pso_option.maxgen),',种群数量pop=', ...173. num2str(pso_option.sizepop),')'];174.% line3 = ['Best c=',num2str(bestc),' g=',num2str(bestg), ... 175.% ' CVAccuracy=',num2str(bestCVaccuarcy),'%'];176.% title({line1;line2;line3},'FontSize',12);177.title({line1;line2},'FontSize',12);。
冲击地压危险等级预测的PSO-SVM模型

安
工
业
大
学
学
报
V0 . 2 No 1 I3 .
J u n lo ’n Te h oo i l iest o r a fXia c n lgc v ri a Un y
Jn 2 1 a. 0 2
文章 编号 : 1 7 —9 5 2 1 ) 10 90 6 39 6 ( 0 2 0 —3 —4
击地 压煤 层安 全开 采 暂 行 规 定 》 工作 地 区按 照 冲 ,
击地 压危 险程 度可 分为 3 : 、 强 ) 级 无 中、 . 利 用支 持 向量 机方 法 建 立起 的 冲击 地压 危 险 等级 预测 模 型为
进行了预测预报E. 4 蒋谙男建立了冲击地压危险性 ]
预测 的最 小二 乘支 持 向量机 模 型 , 用这 个模 型对 并
1 粒 子群 优 化支 持 向量机 的 冲击 地 压危险等级预测模型
1 1 冲击地 压 危险等 级预 测 的支持 向量 机模 型 .
假设 有 冲 击 地 压 实 例 { Y)i= , , ,, z , , : 2 … l :1 Y ∈ { , ), 中 五 为 影响 冲击地 压危 险 等级 +1 一1 其 的因素 , 样本 冲击 地压 危 险等级 级别 ( 照《 Y为 按 冲
煤矿冲击地压危 险程度预测具有一定的参考价值和指导意义. . 关 键词 : 冲 击地压 ; 测 ; 预 粒子群 优化 支持 向量机 方 法 ; P神 经 网络 B 中 图号 : T 1 P8 文献标 志 码 : A 一
冲击 地压 是 一种 岩 体 中 聚积 的弹 性 变 形 势 能 在一 定条 件下 的突然猛 烈 释放 , 致岩石 爆 裂并 弹 导 射 出来 的现象 , 界上 几乎 所有 国家都不 同程度地 世 受 到 冲击 地压 的威 胁. 别 是 近些 年来 , 着煤 矿 特 随 开采 深度 的增 加 , 围岩 的受 力 情 况 变 的 更加 复杂 , 应 力 集 中程度 加 大 , 中 区域 内赋存 的弹性 变形 能 集 增大 , 使得 冲击 地 压 的发生更 加 频繁 , 害更 大 , 危 因
基于PSO-SVM的多分类财务预警模型

1 原 理 与 方 法
1 . 1 支 持 向量机
类算法 , 将其运用到实际问题 中并取得 了良好的 效果 。章智儒 将 S V M 多分类 应用到纹理 图像 分类 中, 证实其分类 效果较传统神经 网络模 型有
一
支持向量机主要是针对两类分类问题寻找一 个满足分类要求 的最优超平面 , 使得这个分类超 平面在保证分类精度 的同时, 能够使两侧的分类
间隔最 大化 。假 设线 性 可分情 况 下 的训 练样 本集
为( , Y ) , i =1 , 2 , …, f , ∈R , Y∈ { 一1 , +1 } (
定优势。应 伟 提 出 了一种 改进 的支持 向量
机 的多类 文 本分 类方 法 。 目前 国内外 也致力 于 将
Vo 1 . 3 5 No . 2
Apr . 2 01 3
文章 编 号 : 2 0 9 5— 3 8 5 2 ( 2 0 1 3 ) 0 2— 0 2 6 5— 0 5
文献标志码 : A
基于 P S O —S V M 的 多分 类财 务预 警模 型
吴翎 燕 , 韩 华 , 唐 菲
l 1 w l 。因此 , 最优 分类面 问题可 以表示为如下
性, 但均针对财务二分类问题 。
的约束优化问题 J :
收稿 日期 : 2 0 1 2—1 0—0 9 . 作者简介 : 吴翎燕 ( 1 9 9 0 一) , 女, 安徽无为人 , 武汉理工大学理学院硕士研究生. 基金项 目: 国家 自然科学基金资助项 目( 6 0 7 7 3 2 1 0 , 7 1 1 4 0 0 1 5 ) ; 中央高校基本科研业务费专项基金资助项 目( 2 0 1 1 — 1 a - 0 3 4 )
利用PSO优化SVM

%% 清空环境clcclearload wine;train = [wine(1:30,:);wine(60:95,:);wine(131:153,:)];train_label = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];test = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];test_label = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];[train,pstrain] = mapminmax(train');pstrain.ymin = 0;pstrain.ymax = 1;[train,pstrain] = mapminmax(train,pstrain);[test,pstest] = mapminmax(test');pstest.ymin = 0;pstest.ymax = 1;[test,pstest] = mapminmax(test,pstest);train = train';test = test';%% 参数初始化%粒子群算法中的两个参数c1 = 1.6; % c1 belongs to [0,2]c2 = 1.5; % c2 belongs to [0,2]maxgen=300; % 进化次数sizepop=30; % 种群规模popcmax=10^(2);popcmin=10^(-1);popgmax=10^(3);popgmin=10^(-2);k = 0.6; % k belongs to [0.1,1.0];Vcmax = k*popcmax;Vcmin = -Vcmax ;Vgmax = k*popgmax;Vgmin = -Vgmax ;% SVM参数初始化v = 3;%% 产生初始粒子和速度for i=1:sizepop% 随机产生种群pop(i,1) = (popcmax-popcmin)*rand+popcmin; % 初始种群pop(i,2) = (popgmax-popgmin)*rand+popgmin;V(i,1)=Vcmax*rands(1); % 初始化速度V(i,2)=Vgmax*rands(1);% 计算初始适应度cmd = ['-v ',num2str(v),' -c ',num2str( pop(i,1) ),' -g ',num2str( pop(i,2) )];fitness(i) = svm train(train_label, train, cmd);fitness(i) = -fitness(i);end% 找极值和极值点[global_fitness bestindex]=min(fitness); % 全局极值local_fitness=fitness; % 个体极值初始化global_x=pop(bestindex,:); % 全局极值点local_x=pop; % 个体极值点初始化tic%% 迭代寻优for i=1:maxgenfor j=1:sizepop%速度更新wV = 0.9; % 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) > 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%种群更新wP = 0.6;pop(j,:)=pop(j,:)+wP*V(j,:);if pop(j,1) > popcmaxpop(j,1) = popcmax;endif pop(j,1) < popcminpop(j,1) = popcmin;endif pop(j,2) > popgmaxpop(j,2) = popgmax;endif pop(j,2) < popgminpop(j,2) = popgmin;end% 自适应粒子变异if rand>0.5k=ceil(2*rand);if k == 1pop(j,k) = (20-1)*rand+1;endif k == 2pop(j,k) = (popgmax-popgmin)*rand+popgmin;endend%适应度值cmd = ['-v ',num2str(v),' -c ',num2str( pop(j,1) ),' -g ',num2str( pop(j,2) )];fitness(j) = svmtrain(train_label, train, cmd);fitness(j) = -fitness(j);end%个体最优更新if fitness(j) < local_fitness(j)local_x(j,:) = pop(j,:);local_fitness(j) = fitness(j);end%群体最优更新if fitness(j) < global_fitnessglobal_x = pop(j,:);global_fitness = fitness(j);endfit_gen(i)=global_fitness;endtoc%% 结果分析plot(-fit_gen,'LineWidth',5);title(['适应度曲线','(参数c1=',num2str(c1),',c2=',num2str(c2),',终止代数=',num2str(maxgen),')'],'FontSize',13);xlabel('进化代数');ylabel('适应度');bestc = global_x(1)bestg = global_x(2)bestCVaccuarcy = -fit_gen(maxgen)cmd = ['-c ',num2str( bestc ),' -g ',num2str( bestg )];model = svmtrain(train_label,train,cmd);[trainpre,trainacc] = svmpredict(train_label,train,model);trainacc[testpre,testacc] = svmpredict(test_label,test,model);testacc。
基于PSO-SVM的焊缝缺陷X射线检测

W el di ng T echno l ogy V01.42N o,10O ct,2013焊接质量控制与管理57文章编号:1002—025X(2013)10--0057—04基于PSO—SV M的焊缝缺陷X射线检测蔡晓龙1,穆向阳1,高炜欣1,魏巍2(1.西安石油大学陕西省钻机控制重点实验室,陕西西安710065;2.西安西北石油管道公司,陕西西安710018)摘要:为了提高X射线焊缝缺陷检测的实时性,本文研究了将粒子群优化(Par t i cl e Sw ar m O p t i m i zat i on,PSO)算法与支持向量机(Su ppo r t V ect or M achi ne,SV M)算法相结合应用于焊管焊缝缺陷检测的方法。
该方法首先提取焊缝缺陷的特征描述,然后利用SV M算法进行焊缝缺陷的检测,过程中采用PSO算法优化SV M模型参数,最后将PSO—SV M和基于网格寻优的SV M分类方法进行了对比。
试验结果表明,基于PSO—SV M的焊缝缺陷检测方法具有较高的识别精度,平均分类准确率达98%,且相对于后者其实时性提高了39.87%,这表明PS0一SV M方法能够有效地应用于焊管焊缝缺陷检测实时性的提高。
关键词:粒子群优化:模型参数;缺陷检测;支持向量机中图分类号:T G441.7文献标志码:B0引言随着计算机和数字图像处理技术的发展,x射线焊缝缺陷检测技术以其直观可靠、数字化精度高等特点被广泛应用于石油焊管和压力容器制造等重要行业的无损检测领域中f1]。
该方法主要针对检测图像进行现代图像处理、被检对象的特征参数提取、分类器训练建模以及分类决策几个部分。
近年来。
支持向量机(SV M)算法在小样本、非线性和高维数建模中表现出了许多特有的优势,被广泛应用于识别系统的分类器建模中。
康维新等人构建了二层一对一SV M多分类器模型,该方法对小样本测试环境的适应能力强,并有较好的分类准确率[2]。
PSO-LSSVM分类模型在岩性识别中的应用

1 理论与算法
1 1 粒子 群优 化算 法 .
粒子 群 优 化 算 法 ( a ieS a pii t n Prc w r O t z i , t l m m ao
这些单 元是 经过 相似 的地 质条件 和相 似 的成岩 改造
在 统计 学 习理论基 础 上 发 展 起来 的一 种 实 用算 法 ,
S M 是 基于结 构 风险最 小 化原 则 , 够 较好 地解 决 V 能
得到 的沉 积物 . 如果 岩石 能够被适 当地 分类 和定 义 ,
那么就 会通 过油 藏数 值模 拟模 型获得储 层 的真 正动 态特性 . 井参 数值是 地 下岩石 的矿 物成分 、 构和 测 结
井 响应 和 实际油 气 储 层之 间 的非线 性 关 系 , 线 性 用 测井 响应 方程 和统计 经验 公式很 难表 征储 层 的真实
大 , 费时 间等 诸 多不 便 . 了实 现 L S M参 数 自 耗 为 SV
动选 择 以及 更好 的进 行 测 井 岩 性识 别 工 作 , 文 提 本 出基 于粒 子群 优 化 的 L S M 模 型对 测 井 资 料进 行 SV 岩性 识别 , 既解 决 了 L S M 参 数 选 择 的难题 , 提 SV 又 高 了识别精 度 .
映射 关 系 , 识别精 度 高 , 并提 高 了算 法的 自动化 程度 .
关 键词 : 性识 别 ; 井 资料 ; 岩 测 最小二 乘 支持 向量机 ; 粒子群 优化 算 法 中 图分 类号 :P 8 T 3 9 T 1 ;E 1 文献标 识码 : A
基于PSO算法的SVM参数优化方法研究

基于PSO算法的SVM参数优化方法研究基于粒子群优化算法(Particle Swarm Optimization, PSO)的支持向量机(Support Vector Machine, SVM)参数优化是近年来机器学习领域中的热门研究方向。
本文将探讨PSO算法在SVM参数优化中的应用,并介绍其原理和优势。
首先,我们需要介绍一下支持向量机(SVM)。
SVM是一种常用的监督学习算法,可用于分类和回归问题。
其核心思想是在特征空间中找到一个最优的超平面来使不同类别的样本尽可能地分开。
SVM参数优化包括核函数选择、惩罚参数(C)以及其他控制参数的选择。
然而,SVM参数优化是一个复杂的优化问题,传统方法通常需要进行大量的计算和试验。
为了降低计算复杂度,提高参数优化效率,近年来研究者开始引入PSO算法来求解SVM参数优化问题。
PSO算法是一种启发式优化算法,模拟了鸟群捕食的行为。
在PSO算法中,每个解(粒子)都有一个速度和位置,并与其他粒子共享信息。
通过不断更新速度和位置,粒子会向全局最优解靠近。
在使用PSO算法进行SVM参数优化时,需要将SVM参数作为优化目标函数的参数。
PSO算法通过不断更新粒子的速度和位置来优化SVM参数,使得SVM模型在训练集上的性能最优。
具体而言,PSO算法的每个粒子可以看作是一个SVM的参数组合,包括核函数选择、惩罚参数(C)等。
每个粒子通过评估其对应的SVM模型在训练集上的性能来计算适应度值。
然后,粒子根据自己的当前最优位置和全局最优位置来更新速度和位置,以期望找到更好的解。
PSO算法有以下几个优势适合用于SVM参数优化。
首先,PSO算法具有全局能力,能够在参数空间中找到最优解。
其次,PSO算法不依赖于问题的具体形式,适用于各种类型的SVM参数优化。
而且,PSO算法不需要计算梯度,因此能够避免陷入局部最优解。
目前,PSO算法在SVM参数优化中得到了广泛的应用,并取得了较好的结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%% 清空环境
clc
clear
load wine;
train = [wine(1:30,:);wine(60:95,:);wine(131:153,:)];
train_label = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];
test = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];
test_label = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];
[train,pstrain] = mapminmax(train');
pstrain.ymin = 0;
pstrain.ymax = 1;
[train,pstrain] = mapminmax(train,pstrain);
[test,pstest] = mapminmax(test');
pstest.ymin = 0;
pstest.ymax = 1;
[test,pstest] = mapminmax(test,pstest);
train = train';
test = test';
%% 参数初始化
%粒子群算法中的两个参数
c1 = 1.6; % c1 belongs to [0,2]
c2 = 1.5; % c2 belongs to [0,2]
maxgen=300; % 进化次数
sizepop=30; % 种群规模
popcmax=10^(2);
popcmin=10^(-1);
popgmax=10^(3);
popgmin=10^(-2);
k = 0.6; % k belongs to [0.1,1.0];
Vcmax = k*popcmax;
Vcmin = -Vcmax ;
Vgmax = k*popgmax;
Vgmin = -Vgmax ;
% SVM参数初始化
v = 3;
%% 产生初始粒子和速度
for i=1:sizepop
% 随机产生种群
pop(i,1) = (popcmax-popcmin)*rand+popcmin; % 初始种群
pop(i,2) = (popgmax-popgmin)*rand+popgmin;
V(i,1)=Vcmax*rands(1); % 初始化速度
V(i,2)=Vgmax*rands(1);
% 计算初始适应度
cmd = ['-v ',num2str(v),' -c ',num2str( pop(i,1) ),' -g ',num2str( pop(i,2) )];
fitness(i) = svm train(train_label, train, cmd);
fitness(i) = -fitness(i);
end
% 找极值和极值点
[global_fitness bestindex]=min(fitness); % 全局极值
local_fitness=fitness; % 个体极值初始化
global_x=pop(bestindex,:); % 全局极值点
local_x=pop; % 个体极值点初始化
tic
%% 迭代寻优
for i=1:maxgen
for j=1:sizepop
%速度更新
wV = 0.9; % 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 = 0.6;
pop(j,:)=pop(j,:)+wP*V(j,:);
if pop(j,1) > popcmax
pop(j,1) = popcmax;
end
if pop(j,1) < popcmin
pop(j,1) = popcmin;
end
if pop(j,2) > popgmax
pop(j,2) = popgmax;
end
if pop(j,2) < popgmin
pop(j,2) = popgmin;
end
% 自适应粒子变异
if rand>0.5
k=ceil(2*rand);
if k == 1
pop(j,k) = (20-1)*rand+1;
end
if k == 2
pop(j,k) = (popgmax-popgmin)*rand+popgmin;
end
end
%适应度值
cmd = ['-v ',num2str(v),' -c ',num2str( pop(j,1) ),' -g ',num2str( pop(j,2) )];
fitness(j) = svmtrain(train_label, train, cmd);
fitness(j) = -fitness(j);
end
%个体最优更新
if fitness(j) < local_fitness(j)
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
fit_gen(i)=global_fitness;
end
toc
%% 结果分析
plot(-fit_gen,'LineWidth',5);
title(['适应度曲线','(参数c1=',num2str(c1),',c2=',num2str(c2),',终止代数=',num2str(maxgen),')'],'FontSize',13);
xlabel('进化代数');ylabel('适应度');
bestc = global_x(1)
bestg = global_x(2)
bestCVaccuarcy = -fit_gen(maxgen)
cmd = ['-c ',num2str( bestc ),' -g ',num2str( bestg )];
model = svmtrain(train_label,train,cmd);
[trainpre,trainacc] = svmpredict(train_label,train,model);
trainacc
[testpre,testacc] = svmpredict(test_label,test,model);
testacc。