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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2020-5-20 14:28 编辑
( |" u7 K7 W* U7 @: I% A, x
# h2 s) e' T# ?/ A9 [3 X) hPSO进行进行特征选择其主要思想是:将子集的选择看作是一个搜索寻优问题(wrapper方法),生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个是一个优化问题。
- _  o) @1 k$ [3 l* `" l5 t. ]$ o, A  @5 f* E7 G% v
( U% l  ?- v# O( |+ K7 e" R3 V
下面是PSO进行特征选择的代码(注意:整体代码是单目标只优化错误率,注意训练使用的是林志仁SVM,数据集是Parkinson,可以到UCI上下载,训练的结果是错误率)( A* F" v: q! k' \3 y
* s+ E2 N9 I. ~7 J1 M. C+ W
数据集分割为训练集和测试集:( ~5 S+ H- P6 J
4 u/ \  x8 H# m
function divide_datasets
3 a( l6 \' T& Q) c, v+ [9 \load Parkinson.mat;* E  F; L7 M+ H  J7 z' O) k
dataMat=Parkinson_f;
' E7 Z! V8 S) H' H8 o: k; Tlen=size(dataMat,1);( J. K' h7 _4 y  |4 Q# V* ^+ @
%归一化
& A0 k/ }4 k/ j; [maxV = max(dataMat);
$ {8 K# E! Q  p" O5 p$ fminV = min(dataMat);  l" P! v6 R# n, W; i2 ?( ~
range = maxV-minV;2 p2 J- K& V. b
newdataMat = (dataMat-repmat(minV,[len,1]))./(repmat(range,[len,1]));
0 O& N& `) o& L$ r7 A/ M; M: Z; d( N- Z
Indices   =  crossvalind('Kfold', length(Parkinson_label), 10);
& y3 I" C/ n4 Zsite = find(Indices==1|Indices==2|Indices==3);8 {2 I% z' J3 V" u4 p8 d2 m8 d
train_F = newdataMat(site,: );
+ e4 D7 f  g' x' i+ u# Ptrain_L = Parkinson_label(site);
, d3 Z% _0 `- u$ N/ c- u  n+ osite2 = find(Indices~=1&Indices~=2&Indices~=3);
5 S! t1 g1 ]% `, B1 `6 n) \test_F = newdataMat(site2,: );
( Y1 t# H  m* t9 h5 X6 s7 ztest_L =Parkinson_label(site2);. m3 I4 M4 ~. _7 c% t* @* _
save train_F train_F;) G% F% T' ?8 s1 v
save train_L train_L;
7 z7 ?8 u" k! G+ x* q  Nsave test_F test_F;
. C3 C1 B8 O( n, o4 k4 }save test_L test_L;
' `1 L5 q3 m" Q% ^' Vend
3 n7 }' B+ z% b7 L+ ~5 c6 U- b8 Z. S5 t4 z# k! T
5 q5 {+ Z1 n' s$ k% @
主函数PSOFS:/ Z+ F' n3 p# c$ T

! g  @$ h7 Y  A& oclear;; S  i$ D5 D& V# o+ [9 f4 B7 y
clc;3 O: w  l  c$ q
format long;
  C8 ?  U, n7 _%------给定初始化条件----------------------------------------------
& M% f7 x* C. h) h0 ~8 L8 |c1=2;             %学习因子1, E" B5 T$ D) O
c2=2;             %学习因子2# d6 _; t- @  A+ F7 p
w=0.7;            %惯性权重5 L& Q+ m' f3 z) _4 |- M8 Q
MaxDT=100;       %最大迭代次数
+ ]' b# ?1 B& R, OD=22;             %搜索空间维数(未知数个数)
2 g- f; o3 B' @% u4 WM=30;             %初始化群体个体数目
2 y( \2 u3 b% U6 [( }  {5 a. z% Gbound=1;
( a7 ~  e" l# D; T4 N%eps=10^(-6);      %设置精度(在已知最小值时候用)% M6 x9 E1 C) C9 A! x
global answer      %最后所有粒子的结果(包括特征与精确度)
- x. G+ V9 S- @) g6 Ianswer=cell(M,3);
+ J2 Q) W& W. Z/ ^- }6 d' L4 tglobal choice     %选出的特征个数- R5 E2 n% w0 D) o; k1 ]+ D9 d8 O
choice=0.8;
* N/ E: w8 X4 i! J' e0 g4 h% o* i5 u/ \, [
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------
$ m7 _* s7 y) l, I3 g; ]! y  s/ v
x=randn(M,D); %随机初始化位置+ E" c% a/ R+ r6 ]; ?
v=randn(M,D); %随机初始化速度
9 P5 ^5 x% i% _" _. X. u9 dx(x>bound)=bound;4 e- l7 f; w! V
x(x<-bound)=-bound;+ m: ]( R2 J8 q" u9 t
%------先计算各个粒子的适应度,并初始化p(i)和gbest--------------------
2 h+ U( i. K4 x  [9 R3 Idivide_datasets();
( [. Q9 ]4 Q8 a( c, @for i=1:M% f  m$ \5 c8 z' n9 r. i
    p(i)=fitness(x(i,: ),i);, ]; u: E) o8 }
    y(i,: )=x(i,: );
6 M4 C* w1 r, x8 z0 O2 r3 I; c* fend( `% e. Y' l: T! ^" Y
gbest=x(1,: );             %gbest为全局最优# F( h5 n; P2 l' l

! J/ S$ S+ s1 g- l* \5 }; [for i=2:M
2 k$ C' {: x$ J' D0 m1 {    if(fitness(x(i,: ),i)<fitness(gbest,i))
2 m- w& k7 U! v. w        gbest=x(i,: );
5 z. U: f: ]0 d# j5 {9 H  L% b) M    end
$ _# @$ y% q  G, Vend
3 ^+ E' L3 ~4 E5 B! z' S
0 k& j2 Y4 t& b1 Y( w2 f, A%------进入主要循环,按照公式依次迭代,直到满足精度要求------------
' |  U2 i* s! Q& Ofor t=1:MaxDT
9 l% S4 f+ y! K) u5 \& @    for i=1:M
& E$ l% U8 _& F5 w* ]  p        v(i,: )=w*v(i,: )+c1*rand*(y(i,: )-x(i,: ))+c2*rand*(gbest-x(i,: ));9 T+ x9 k1 s: T! ]: U
        x(i,: )=x(i,: )+v(i,: );, g6 L6 i! v, l# i
        if fitness(x(i,: ),D)<p(i)
3 L. C4 V+ p: Z% @7 c9 Z            p(i)=fitness(x(i,: ),i);; ~2 M2 k( V1 j1 U, d5 e
            y(i,: )=x(i,: );
! k3 o; w9 U5 H7 y# ~        end( S( ]* s! p6 z0 o6 g: H  i- D
        if p(i)<fitness(gbest,i)
. Q7 `1 X9 {  r            gbest=y(i,: );
: E1 M4 q0 z+ b. H% x2 G& S8 A. e        end
4 B, \* }2 Y3 A) P8 p, n    end1 P# A5 P( |3 r( Y; H
end
2 k" C: B( k% s6 s
2 T7 v: I4 M% G" X: i; A" ^4 {%------显示计算结果2 k0 `" u' S6 Z- f- I* z
disp('*************************************************************')
# g& @% x% B. Q: j/ P: GSolution=gbest';
0 t$ i8 {' \- P/ H: tResult=fitness(gbest,i);
# F1 \0 w; J" C  tdisp('*************************************************************'). R3 F' v+ [% j% m  A
* s5 V& n7 u% B$ K
, K& K% L8 w; o
特征选择评价函数(利用林志仁的SVM进行训练):+ q2 v  [$ c8 i. K) D- o% C! b1 E

4 Z" W* v4 |0 }) N( U; C! |( m6 @8 P0 Xfunction error = fitness(x,i)$ q- Q" c2 R( j
global answer0 H7 X- N9 S8 i8 `9 I3 z  J% O
global choice! [; M2 N) L6 K4 m
load train_F.mat;0 V5 @* @. r8 }7 i1 ]9 z( u
load train_L.mat;9 u' |# r# ?3 B6 C* r, w' ~& T
load test_F.mat;
+ P& N8 p* |# d% k) w3 cload test_L.mat;
# U  q7 F% p- i' s. V1 H
( }5 z/ i# a7 ninmodel = x>choice;%%%%%设定恰当的阈值选择特征3 i' ]2 N3 D. S! o  g
answer(i,1)={sum(inmodel(1,: ))};" w# F4 h7 w* v0 J1 T3 G6 o) u
model = libsvmtrain(train_L,train_F(:,inmodel));. t% K# Y4 w" t, p6 k4 }) z
[predict_label, ~, ~] = libsvmpredict(test_L,test_F(:,inmodel),model,'-q');
7 e: J0 ]' M: }% B( Y( ^9 l% Z9 Zerror=0;1 I! |  }& d9 J7 d
for j=1:length(test_L)
* m2 E, H! F/ P" k& X1 f; T/ x/ c    if(predict_label(j,1) ~= test_L(j,1))! B1 D2 E! M# |
        error = error+1;3 n! v. K8 S7 E3 X
    end
" Z# o& z/ g* {: hend
& {6 G2 G! {8 l+ _& F% eerror = error/length(test_L);0 i" b) m6 H& W" ?$ c& h  K# _
answer(i,2)={error};
7 g- a: `: ?. K- t; L1 l9 N+ qanswer(i,3)={inmodel};
* [8 L& v7 E& `4 Z5 _end1 ^5 t: O. S" @/ d$ G' Y6 P3 M
) G- _0 x  S/ |% e* [  t
# ]5 N+ F; f& W! p- N
结果(选出的特征数和错误率):
4 S5 V! N0 o; y. p' I特征数:3 * w1 v- s4 _% B9 e! H
错误率:0.1544/ {+ S/ M0 U% ^& y0 g+ Q
$ P) {& I8 `: K  A
9 x# U& C8 X$ N

$ x* n3 m7 |8 S" J6 a! B# S

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-4 21:15 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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