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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2020-5-20 14:28 编辑
( C8 |* T  j8 K7 q5 j3 Q- y  k
. N8 k  h9 L- Y- w$ CPSO进行进行特征选择其主要思想是:将子集的选择看作是一个搜索寻优问题(wrapper方法),生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个是一个优化问题。
1 K: W# e( Y1 V1 ]9 _
& k, K' a& D! X2 n
" c, R. a1 y! C$ O8 x- g下面是PSO进行特征选择的代码(注意:整体代码是单目标只优化错误率,注意训练使用的是林志仁SVM,数据集是Parkinson,可以到UCI上下载,训练的结果是错误率)% {% T* U  g3 K. L# [+ u# ^

- x' P; y* V- N0 ?; @6 W数据集分割为训练集和测试集:
3 Q% d2 P, k. A% C
; X; u# I8 l$ Q; \3 g+ [1 y& r+ xfunction divide_datasets
2 ~$ |3 O! e$ b# R8 sload Parkinson.mat;# h; c& l1 X4 p, X4 m+ W
dataMat=Parkinson_f;; D! J) ^4 j1 K" ~) a- }- P* D
len=size(dataMat,1);3 ?3 D' M& e0 k7 R, P& }
%归一化1 b0 ~0 H; z) E+ u2 W) Q- W
maxV = max(dataMat);
& ?+ g; Y% m' k) a  N. |( rminV = min(dataMat);5 l6 U8 b  C* M5 f$ s' F
range = maxV-minV;+ d* z9 Z1 Z- R, m# C# H
newdataMat = (dataMat-repmat(minV,[len,1]))./(repmat(range,[len,1]));
* x. }  f; V; w% t& T& k) F* L/ g! `# e) v. n' d
Indices   =  crossvalind('Kfold', length(Parkinson_label), 10);$ S5 ~" y8 q1 E% V, V# s1 ?
site = find(Indices==1|Indices==2|Indices==3);8 X( g1 C3 t7 f4 U+ H
train_F = newdataMat(site,: );( u* x6 P9 U) A
train_L = Parkinson_label(site);0 J/ ?; k- p" H9 k  L3 }0 \
site2 = find(Indices~=1&Indices~=2&Indices~=3);; J( {" h8 U4 P( F
test_F = newdataMat(site2,: );/ r( S1 U" O  s
test_L =Parkinson_label(site2);( @/ p1 `# ^2 [! m; e
save train_F train_F;
: K$ J, B3 I( R5 E& R5 D( k# ]/ Fsave train_L train_L;
: L. N- U1 G$ ]0 q+ _& s1 \: qsave test_F test_F;& k" C3 b% {* Q$ F7 I! h) A7 k6 }
save test_L test_L;: D, K! x) x* t# s% N
end& H& d6 r# a8 ]) `: ]
7 D# |1 A6 {5 o& q, w7 u; D9 |

9 |3 p4 R1 `- j7 q2 R0 @主函数PSOFS:
# p6 Y; `: z* l, c  B; a. f( w8 Z& e5 ]! f) {! p/ n
clear;
$ v! D8 Y0 h% ]' u$ xclc;; e- v2 S1 C! P9 P8 }8 W% q
format long;
  Q8 ?9 Q) ~: Q5 U6 f7 A%------给定初始化条件----------------------------------------------  X1 x% m2 k6 ]. G1 E
c1=2;             %学习因子1
3 u8 l2 Q  z6 S  ?! y- \c2=2;             %学习因子2( v. l; Y2 a! ?& U# W
w=0.7;            %惯性权重* _) h, U* l9 z/ T6 {  L$ T
MaxDT=100;       %最大迭代次数3 U% p4 @$ X+ ?+ ^" k
D=22;             %搜索空间维数(未知数个数)
+ K& ^1 x  C6 K# k" Y4 `, ]% HM=30;             %初始化群体个体数目
/ B& J+ j1 ^8 E1 sbound=1;+ t# y8 E+ z6 O. c
%eps=10^(-6);      %设置精度(在已知最小值时候用)
/ L0 j4 f2 z- k0 B' A1 Nglobal answer      %最后所有粒子的结果(包括特征与精确度)* O# P& A2 @) R! l, h
answer=cell(M,3);
' A8 |, E- \  O. r5 X4 F) ^global choice     %选出的特征个数5 P: u0 M' U$ J& ]
choice=0.8;
* K0 K) t+ G* M1 S$ L8 o' w5 e0 u( M7 E% o* W& N
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------
1 M/ b5 F' y" }5 c3 ~& A! M
! J' L# |! V7 E7 x0 u& g& R# ?x=randn(M,D); %随机初始化位置( B3 ]# @# o# c6 D
v=randn(M,D); %随机初始化速度
" V2 E6 a& M3 [& Ux(x>bound)=bound;) q- L" K, a. x8 E$ H
x(x<-bound)=-bound;
2 @. G5 B: m& |; e" N7 X%------先计算各个粒子的适应度,并初始化p(i)和gbest--------------------8 G1 S/ [& c6 I7 |1 G, t
divide_datasets();& G* G. K6 E$ c+ ?' m( ]
for i=1:M, ?& n% ?* h% T, \; n+ [( m$ n
    p(i)=fitness(x(i,: ),i);
. V5 B! ^; ]# [; }; K5 j: R    y(i,: )=x(i,: );
$ G# \% B" R0 W# T0 s5 |end
/ d/ ^' P+ [+ F" `gbest=x(1,: );             %gbest为全局最优
& h. C; L( @% q) H; R
1 Q2 N# [4 [+ b3 xfor i=2:M! ]4 K# I  P7 J0 u# c
    if(fitness(x(i,: ),i)<fitness(gbest,i))2 x' O9 _1 |0 D2 K) k0 ^, B
        gbest=x(i,: );' P6 P1 e0 c9 V5 Z( q$ t
    end
1 |5 f. b% |9 H7 }/ m+ bend- ?' I' e0 Q4 |

( f, N8 p9 H9 ?%------进入主要循环,按照公式依次迭代,直到满足精度要求------------
7 t6 y& N: h! D, V, \for t=1:MaxDT4 ^# H" y! g  b# b% ?9 q+ T7 U) L4 c
    for i=1:M: T: d8 _1 {$ {  m# [$ v
        v(i,: )=w*v(i,: )+c1*rand*(y(i,: )-x(i,: ))+c2*rand*(gbest-x(i,: ));7 Y$ _! a- b3 A
        x(i,: )=x(i,: )+v(i,: );
/ A& r2 ~6 I& k* [" C. @' t        if fitness(x(i,: ),D)<p(i)  g! A4 f' }$ M, H# j
            p(i)=fitness(x(i,: ),i);
  P* d9 P8 M% V- \! v3 t            y(i,: )=x(i,: );
% B& Y2 J0 ?- K. @3 y        end& I+ \6 c+ Q; e! G. m3 b
        if p(i)<fitness(gbest,i)0 T2 c* Q0 @, t: _( x) |+ r
            gbest=y(i,: );
0 T# |1 F' m  O; {4 l5 ~        end6 j% t1 A* z8 m0 z# d
    end
( r. o* z$ I  P% C) d* tend' }* y& t2 M2 T5 l* x# Z

2 H+ }, H4 ~& g3 z. r! x9 e9 i%------显示计算结果
6 Q3 o0 C. a0 ^& @1 i  U( d+ j" F' zdisp('*************************************************************')5 U( M5 D- ]+ v$ v1 w+ U% z
Solution=gbest';4 Y  M% X- C+ w9 b
Result=fitness(gbest,i);
, R# @1 C5 I' ?0 m7 X7 Fdisp('*************************************************************')
# M% @( l; q0 @4 s' L
$ B$ J, R# p' Y  K
, T: V0 d0 B1 V' l特征选择评价函数(利用林志仁的SVM进行训练):
4 y4 P4 e  r0 k! D5 l0 q  Q8 @1 O+ r
function error = fitness(x,i)
, M  v$ ]# t+ V+ H+ _6 rglobal answer
" o" @2 w$ w1 }9 D. O" @! ?) p& fglobal choice2 T. ^+ T! p. E* i8 G3 W/ r! B
load train_F.mat;6 @) B) l* w( y# U! H: ]; y
load train_L.mat;
! K# M' U5 n6 e1 ^, W" ]load test_F.mat;
0 |+ q9 p, t% Z9 {/ G, Z3 J$ D9 D% wload test_L.mat;8 W5 `$ ?$ q7 ~- O
! g! c$ y  r* i6 i$ S' m1 V, _
inmodel = x>choice;%%%%%设定恰当的阈值选择特征2 F/ y* N( F9 e5 F: t
answer(i,1)={sum(inmodel(1,: ))};
( v' k2 f' @5 }% W$ rmodel = libsvmtrain(train_L,train_F(:,inmodel));8 ?3 G$ h- J# N$ G' }% R$ F' }
[predict_label, ~, ~] = libsvmpredict(test_L,test_F(:,inmodel),model,'-q'); 6 F5 n# E& e% r! ?# u1 A
error=0;# M4 T" U/ [$ _3 d
for j=1:length(test_L); e# j4 D% z9 R
    if(predict_label(j,1) ~= test_L(j,1))
" v" l1 e- Y* A* j. x9 H) A" y, D* \        error = error+1;
$ P" v0 N; N- C    end
7 n# }' G0 b$ S$ yend
/ L5 N8 j4 I5 Perror = error/length(test_L);4 k) J, f' m* k( A* z
answer(i,2)={error};" c3 X% K  y4 B3 h/ z' A/ M4 D1 i1 U
answer(i,3)={inmodel};
, ~) J* `2 j% T& u& ^end$ f! V, Y1 O: {+ |: M+ H2 n+ g. d
. i* T9 T. i8 q

! ?, \' e5 A9 n7 _结果(选出的特征数和错误率): + T  |: o  Z; ?, I
特征数:3 ' c  J6 o# x6 r: ~' ]& q( N& Z) s
错误率:0.15444 }  t1 Q) ^2 d, O  |- |

& k# `) y  O8 n- K4 Q/ v5 O: B/ @4 ~  k4 w. q  ?# u6 x+ M6 E
8 g4 l8 V$ \' J% f8 M1 p- k* P

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 08:21 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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