找回密码
 注册
关于网站域名变更的通知
查看: 355|回复: 1
打印 上一主题 下一主题

PSO算法特征选择MATLAB实现(单目标)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-5-20 14:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 uperrua 于 2020-5-20 14:28 编辑 - q2 O6 B" w5 A' i* T( d
: n( m8 x* ^+ w2 i* G4 X" h" }5 w
PSO进行进行特征选择其主要思想是:将子集的选择看作是一个搜索寻优问题(wrapper方法),生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个是一个优化问题。
' B9 `0 d& \  G, D: w$ w# T
) Z2 q2 j$ b( M& f* `) Z+ o( _/ W& H# M0 }
下面是PSO进行特征选择的代码(注意:整体代码是单目标只优化错误率,注意训练使用的是林志仁SVM,数据集是Parkinson,可以到UCI上下载,训练的结果是错误率): ~+ D& _5 W) e: b6 w) n( x+ S# O
& p; l7 H  g, H( Y( v, y3 B
数据集分割为训练集和测试集:0 V0 ?7 o% _4 Z- S0 m

7 u0 ~. O0 D9 Z1 v* W0 A6 Mfunction divide_datasets$ U5 c8 J! L4 w" w" N
load Parkinson.mat;
% n- Z8 j  B' a2 x7 _) {; W& f1 g: S$ NdataMat=Parkinson_f;) @; f" F5 `" Y6 O: Q: D
len=size(dataMat,1);
1 @, a/ S! W+ \, T%归一化
  |# b  {0 W* H" omaxV = max(dataMat);  @: I  Q$ i. f# h2 a) P
minV = min(dataMat);
; j/ c7 h2 a% Erange = maxV-minV;
6 M7 j, F, f: EnewdataMat = (dataMat-repmat(minV,[len,1]))./(repmat(range,[len,1]));% R3 U8 G7 R) N+ h* F

2 c% N0 d0 C4 f( t% g% o; E) v4 v) _Indices   =  crossvalind('Kfold', length(Parkinson_label), 10);5 z( K$ M; }* X; A' p$ c2 i
site = find(Indices==1|Indices==2|Indices==3);$ c# n! x" v1 W/ p' a; x
train_F = newdataMat(site,: );
9 g# n' E# O  ^train_L = Parkinson_label(site);
" c3 x3 i/ J& f4 H5 T* x* R2 Isite2 = find(Indices~=1&Indices~=2&Indices~=3);0 u1 b3 a: r2 H; H3 x
test_F = newdataMat(site2,: );
9 X+ e6 W4 |, _& [! ~& K; s* Dtest_L =Parkinson_label(site2);
# j& l- Z8 X: l* Y$ M  X( H( xsave train_F train_F;5 Q1 \. |5 f. A( y* n8 I- v0 A
save train_L train_L;
: K8 b! ?  X. _5 P: {! f- rsave test_F test_F;
7 Y& e, h& m* S* _save test_L test_L;, I3 W% \4 X& w, r( L( L7 w5 l# u
end& a) V' Q4 j; ^! k3 V2 |+ n& H
( B8 w3 t8 o% L, v$ w2 O

: j- j+ L3 i' _/ v0 G1 a; L主函数PSOFS:# d# _1 u- y+ n7 E4 s- ?

+ d& F+ D$ k4 d; H2 @clear;/ \% o1 G2 ^% v. {5 l: f
clc;
* y; Q# U. m* Q$ Bformat long;
3 `( Z4 M6 P$ c! I# W! E$ j7 D/ y%------给定初始化条件----------------------------------------------6 B7 w3 K' T& D; `# y6 m
c1=2;             %学习因子1
. u$ c7 N! q; y4 A; Gc2=2;             %学习因子2
# U5 E2 z: b% D7 X1 }" I  k% f% ]w=0.7;            %惯性权重4 s9 i$ [: r6 y; w4 u$ H
MaxDT=100;       %最大迭代次数$ x5 K# J" P$ |) \9 M9 @) d3 g1 C
D=22;             %搜索空间维数(未知数个数)
& D) ?7 J; o- |M=30;             %初始化群体个体数目' h; y" R- V7 d( D
bound=1;
" ^5 L- h7 ^4 I, |%eps=10^(-6);      %设置精度(在已知最小值时候用)
" f$ s& T  h4 ^( B" r: T' Oglobal answer      %最后所有粒子的结果(包括特征与精确度)4 d* s9 f- E+ s
answer=cell(M,3);# i; }; ]/ J; L% ?* V& }
global choice     %选出的特征个数
) y% m. k( d# d' s. y5 {choice=0.8;
: W: q1 I( z8 b  ~; E5 S4 p5 V. Z8 z2 _5 R4 {; C$ M: C6 i$ ^! X. q
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------4 p- P; ~) a; ^8 j: G: E

6 L) }1 L) ^' B, p% Gx=randn(M,D); %随机初始化位置
6 @2 ?. s1 w& {3 b' `: _v=randn(M,D); %随机初始化速度
3 I" R, q  B* cx(x>bound)=bound;+ c+ S/ m  ]( l) S' \  _! r: ~" L- E3 G
x(x<-bound)=-bound;
8 F+ |2 v1 ^; E+ G" i%------先计算各个粒子的适应度,并初始化p(i)和gbest--------------------
  N* m+ i; l$ F$ D6 Edivide_datasets();
7 q4 I6 J. U, f; Q, _0 Q0 S  ~# ^for i=1:M6 v) S  k& t$ H2 x5 w
    p(i)=fitness(x(i,: ),i);' [$ T3 M, d( u, |
    y(i,: )=x(i,: );5 ^4 {# f2 H# A8 c- s
end
4 Z( r* A- i  a% Q# R! M" b; dgbest=x(1,: );             %gbest为全局最优* L2 \0 x- Q7 I
% V* }0 k! \# o) y! I& m
for i=2:M
, g0 I8 o7 x! h4 O8 q; \% D    if(fitness(x(i,: ),i)<fitness(gbest,i))2 w6 M, ~8 Z3 R- M8 ?* ]( ~
        gbest=x(i,: );5 D& X& E6 b  v
    end
$ u( J+ J. N! a$ k6 |5 Jend' Y  d3 f" p+ S( R
# K( B0 Q3 z: c/ f) J8 }5 |" _9 S* c
%------进入主要循环,按照公式依次迭代,直到满足精度要求------------
7 M$ z/ _$ k* w7 Jfor t=1:MaxDT
# x$ G4 A6 x- b# W$ R# m8 U  v5 `/ V    for i=1:M" k: ^, W) h' |. q6 i
        v(i,: )=w*v(i,: )+c1*rand*(y(i,: )-x(i,: ))+c2*rand*(gbest-x(i,: ));- A$ |! ?, ]( V
        x(i,: )=x(i,: )+v(i,: );. ^* c. s, y& T
        if fitness(x(i,: ),D)<p(i)9 P* C5 s4 s4 p( H+ h5 y
            p(i)=fitness(x(i,: ),i);1 x4 q& D$ n: z1 Q" K/ P$ N5 i, ^
            y(i,: )=x(i,: );
- ~: Z. F' [1 z$ {/ U% r6 N        end# Z! v: F& T9 U% ?9 @- U6 B
        if p(i)<fitness(gbest,i)
; j) P$ d0 M1 e. x  q4 b3 }0 ~- l: {            gbest=y(i,: );3 I  V. m* d2 y
        end
& o% J' U5 ~# b5 o    end1 u" r+ t8 }$ W/ g8 I( {1 W& [
end
9 q- z% ?) i' X$ q: U; N# u1 V+ D8 z9 j3 z7 u
%------显示计算结果: W+ D9 P4 U5 Z
disp('*************************************************************'). n0 ~3 U. P6 n$ U2 V3 D; Z
Solution=gbest';
& d$ d! o% j+ b7 z$ N  W8 G4 {" g' m) IResult=fitness(gbest,i);; R+ |+ ^5 y1 Z, d4 g5 B" T
disp('*************************************************************')0 X2 T$ f6 O2 T4 b  C" `
2 s+ Y* p8 \0 I0 i+ G3 k
/ q/ r  h5 {* @, I
特征选择评价函数(利用林志仁的SVM进行训练):+ p9 d" W& u/ ?& k

' ^0 ]+ I3 B8 f& w. n! s; {, Ifunction error = fitness(x,i)
* h7 K+ G+ y$ h( I7 p+ h& c3 l* o& uglobal answer
, d4 a2 V, g& y4 jglobal choice( i/ u( q# a# m* ]/ u. a+ _
load train_F.mat;
% _- a' O# O2 ?5 }2 \" @2 Lload train_L.mat;
7 Z  _( u# Y7 g6 ^6 [; zload test_F.mat;: u& k% E' S; A  ~
load test_L.mat;
1 P. S& I2 y/ ^7 u+ ?7 T
% a! g5 k- Q4 B" H# Linmodel = x>choice;%%%%%设定恰当的阈值选择特征
/ T% f0 {* T. z# X. zanswer(i,1)={sum(inmodel(1,: ))};
3 j2 O- |4 i; lmodel = libsvmtrain(train_L,train_F(:,inmodel));" I' Q! J# k3 H) u' O3 x* G! O% c
[predict_label, ~, ~] = libsvmpredict(test_L,test_F(:,inmodel),model,'-q'); " p- ?! A$ r- j$ R& w0 N
error=0;
8 R) J( o1 [+ V2 ?; e. H9 ~for j=1:length(test_L)) k% w( M- m8 D6 L# f
    if(predict_label(j,1) ~= test_L(j,1))$ L6 `4 X' q, \# |
        error = error+1;
, l! h- T  ^: S, V: j    end% ~+ M. A! G* U3 F4 k7 {/ i
end
. U9 {$ _9 v! _error = error/length(test_L);" J, l, N6 }; l% s8 ^% Z0 W
answer(i,2)={error};
; B! q) H0 ]. V! p# c; X3 hanswer(i,3)={inmodel};
1 c/ v# k6 w  y1 x4 [2 p. @$ U* nend
) S& A1 d* {7 _+ ~( j  R3 D* E) x0 w  M: w' X. g7 s
3 y8 S: n& \4 q- p+ P, p
结果(选出的特征数和错误率):
! V9 O$ h) y. X' O, E特征数:3 ( `# `$ T) y. E' _
错误率:0.1544/ j! m4 u# T8 M1 n
; q' \" r  D+ `
$ A% S- X" M0 Y# Q
. t, J* p# M, R3 L

该用户从未签到

2#
发表于 2020-5-20 15:27 | 只看该作者
PSO算法特征选择MATLAB实现
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-23 08:13 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表