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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2020-5-20 14:28 编辑 $ {2 V  u2 o4 U/ |" p' U2 B/ Y

7 b& M( ]( ~8 ^% K' @0 M- G* M$ \PSO进行进行特征选择其主要思想是:将子集的选择看作是一个搜索寻优问题(wrapper方法),生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个是一个优化问题。) K: q0 E! P6 I  W- ^  ^# V+ G" c

6 N0 M$ D, ^; f6 M
3 H7 Z: A, H; I下面是PSO进行特征选择的代码(注意:整体代码是单目标只优化错误率,注意训练使用的是林志仁SVM,数据集是Parkinson,可以到UCI上下载,训练的结果是错误率)& A. U3 r% w3 }- r) E

  r2 R2 H. h: `% h数据集分割为训练集和测试集:
( Z# Q$ n) C% }! p& V0 i" f! @8 G4 ?# K: y
function divide_datasets! Q# L" B+ d# _1 i; K3 s9 |
load Parkinson.mat;
- I- R  Z& w6 H7 S& D+ |9 {. C4 ^$ KdataMat=Parkinson_f;
) p, ]" V* ]4 elen=size(dataMat,1);
" l  p  f$ R- M: J%归一化
3 N) u2 m; k3 Q( }; tmaxV = max(dataMat);
9 _6 i  w" }( N2 l, NminV = min(dataMat);
& U3 }" o4 y* L+ e' o5 Hrange = maxV-minV;
! j! e- H6 X( g, B7 [6 `newdataMat = (dataMat-repmat(minV,[len,1]))./(repmat(range,[len,1]));
( w8 L0 [, u% U
5 @4 X- h$ T: q  m+ T& F% iIndices   =  crossvalind('Kfold', length(Parkinson_label), 10);% i+ \4 a- ^3 M1 x9 m& y
site = find(Indices==1|Indices==2|Indices==3);
0 P% x  f3 S# D7 e0 T3 Gtrain_F = newdataMat(site,: );
2 L) \7 y) R/ {5 ^7 rtrain_L = Parkinson_label(site);
6 Y( V. a: q4 [site2 = find(Indices~=1&Indices~=2&Indices~=3);5 d6 \) A$ }6 d" y$ \% h& `
test_F = newdataMat(site2,: );9 F9 Z, F2 H% `3 g6 ^& t
test_L =Parkinson_label(site2);
$ I7 T; x- |$ {2 }save train_F train_F;5 v+ L! X. k9 g  E: o
save train_L train_L;$ j' o# u" d9 w. i. d( L$ Q
save test_F test_F;1 S, z0 e0 J) e9 m' z* z1 c
save test_L test_L;4 p8 q- d1 v1 Y& n* H7 O1 @
end4 ^( [! i' g8 i% |( ]5 r: e$ v

/ u0 g' a0 D: C1 O8 s6 P3 s5 }  l6 K& j7 g5 M* E
主函数PSOFS:; b' F4 ^( g# v( X' P
& Q: T8 M, H: }6 J8 t( }  n+ k) c
clear;
8 ]4 y) E# G( q8 T2 hclc;% W8 p9 z4 ]- e5 L
format long;7 `1 M/ R  ?5 \/ d+ B% e- H! y( d
%------给定初始化条件----------------------------------------------$ t) m9 A" {3 U4 O- W
c1=2;             %学习因子1
' }3 e; J. k9 J4 }5 J& z& Q6 [6 K* uc2=2;             %学习因子2' \* J2 s! [/ ~" D5 i
w=0.7;            %惯性权重$ u* x( u8 h" D2 L4 P9 z
MaxDT=100;       %最大迭代次数% h2 H' H7 P! E& h" x4 T
D=22;             %搜索空间维数(未知数个数)6 q( H# L7 B+ E9 K  X
M=30;             %初始化群体个体数目1 @+ l/ n5 G5 \
bound=1;3 X+ L, f4 V% G. l5 E
%eps=10^(-6);      %设置精度(在已知最小值时候用)
/ q% e/ W/ P& dglobal answer      %最后所有粒子的结果(包括特征与精确度)
' G, ?! s5 k; |% l# s+ }) zanswer=cell(M,3);
) W* D' x2 ^9 R  Fglobal choice     %选出的特征个数/ e  D  X# d. ]* J6 e
choice=0.8;9 e' y- V; d( {. _! e! B2 j
7 D6 {/ E6 g+ I- q/ Q$ M; ~/ l) T
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------: P1 {) u1 ?$ U  ?) P

0 _5 @) p4 ]) c8 ]0 x7 i2 q2 Ix=randn(M,D); %随机初始化位置5 J( e; ]3 o* |/ B5 m" v
v=randn(M,D); %随机初始化速度
) T1 B. L& |# ]6 M  d9 w9 lx(x>bound)=bound;0 \* I+ ^1 ?* e% C7 M
x(x<-bound)=-bound;
9 @4 e* o( r4 M5 E6 m1 ]%------先计算各个粒子的适应度,并初始化p(i)和gbest--------------------" \& ]$ n7 _0 Z3 i$ v: r" G
divide_datasets();- q' `$ E$ Z+ b* q8 H; m: o
for i=1:M
- r$ C* F; ~! Z( S) k. S1 B    p(i)=fitness(x(i,: ),i);8 x! u- t5 r9 }3 }; t8 @
    y(i,: )=x(i,: );- J' g6 k! R; t) Q$ R1 j: x0 Q
end' W5 r  e+ W7 h
gbest=x(1,: );             %gbest为全局最优
" B' K  f  z( H9 R5 j7 N/ K
6 j# c* N' ]- ?/ M' ?! ~for i=2:M
8 G  K, r( Y/ ?1 w3 F& {' s  w2 \$ s    if(fitness(x(i,: ),i)<fitness(gbest,i))
: N. D- r- q( k8 Q% A        gbest=x(i,: );
2 Z; F( J0 `' ]& [    end( ^8 X$ b" G( s) |
end8 d( V. l8 M% P3 K9 q% K( e. Z1 R

9 B8 h  Y6 F" q& c& A) ?9 e/ g%------进入主要循环,按照公式依次迭代,直到满足精度要求------------
3 N8 [1 E3 w! L& ^$ _for t=1:MaxDT" T# ^9 j4 G4 G8 h" L
    for i=1:M. z9 R8 h, ^3 X
        v(i,: )=w*v(i,: )+c1*rand*(y(i,: )-x(i,: ))+c2*rand*(gbest-x(i,: ));% ~9 H5 s# f3 c6 g. p- q1 y
        x(i,: )=x(i,: )+v(i,: );
( p9 X* U" K" }6 t( |4 c' r        if fitness(x(i,: ),D)<p(i)
! g4 f4 e$ Y5 x1 J7 ]: S  h            p(i)=fitness(x(i,: ),i);
( [# g& M$ u  Y            y(i,: )=x(i,: );2 e% f" V% Z) t
        end7 v3 ^* c+ i- Y/ L
        if p(i)<fitness(gbest,i): Y9 U- R' G8 V$ {8 `
            gbest=y(i,: );, X! D) i8 A: L0 Y
        end( }; U7 n4 {! B* c/ S: i, F8 ]( v$ r: v
    end
3 x2 v8 N6 I* s- Q* P) Jend
: {" w! F9 u* k! T5 n
; Z% c; }6 \* ~) I* I2 s%------显示计算结果/ ]! Y! ~% D0 P2 a
disp('*************************************************************')5 O, @, n+ s1 u: ^' _3 Q9 \% u
Solution=gbest';8 O0 Y+ D: R. o+ v$ C
Result=fitness(gbest,i);, o+ x& ?5 j: r- H: m
disp('*************************************************************')- B0 |! v: B" Y

) M% H( q, _3 V7 D( E6 a; t9 q" q: x
& X' n$ @. o) F( y4 p特征选择评价函数(利用林志仁的SVM进行训练):5 F! x( D9 T: c7 U# k

$ I" ~" T7 @# y9 X' v* L9 jfunction error = fitness(x,i); S. T3 V+ G* g& G5 y
global answer
0 F. j8 T0 y! Y1 Tglobal choice
1 W. v3 p; @+ o& I# nload train_F.mat;
/ p+ {" K* O' N  i; D! z' Bload train_L.mat;) a& H" o, J* M) K# J( [
load test_F.mat;
& t# p# J% N  z! }+ D; {3 t3 oload test_L.mat;( Y, a  N0 Y/ s3 k9 x& ]

2 S8 Y9 g& C4 F+ |9 Q$ @3 n0 Dinmodel = x>choice;%%%%%设定恰当的阈值选择特征
  V8 [" c9 E) X) q* [' Kanswer(i,1)={sum(inmodel(1,: ))};
0 {9 Q% F5 Z& g; F5 Dmodel = libsvmtrain(train_L,train_F(:,inmodel));% `+ B& C) G5 V+ l
[predict_label, ~, ~] = libsvmpredict(test_L,test_F(:,inmodel),model,'-q');
5 B( _5 z# X- G/ h7 F- t- R0 terror=0;
9 k3 X7 _+ c6 E) H) r0 hfor j=1:length(test_L)
+ Z3 ~8 [9 T& i! ]1 a    if(predict_label(j,1) ~= test_L(j,1))
2 C6 M% O' C' b; H! X2 G7 f" A7 i        error = error+1;7 Z) Y) s0 O( x. C7 R' G
    end
1 }: `( s0 O! a8 r: Kend) N* x" n7 z' q- b9 v5 [% |5 n
error = error/length(test_L);+ W( d; W8 Y' c4 r) p
answer(i,2)={error};3 _: G3 |& X! U) s9 K* w* p; _
answer(i,3)={inmodel};
! G/ w8 |) X$ I$ T7 X2 |end7 m+ {. D4 G; S: ^

8 w! R! F  }7 L& i
( T  x* u4 T& z$ P5 p结果(选出的特征数和错误率): 3 @  \$ V  M* D& E
特征数:3 0 r0 F: ^* B/ g7 z( v2 d
错误率:0.1544
: N( \7 g* l4 ~0 [
) t4 Q* e6 h4 G* h% \+ R2 v4 P* o* [& j

9 v  A; r' t0 M( J. O& F  H; B3 a

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-23 20:12 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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