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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2020-5-20 14:28 编辑 & v  B% V1 |/ M- B

  ^/ ]% @5 N6 V2 L& s4 xPSO进行进行特征选择其主要思想是:将子集的选择看作是一个搜索寻优问题(wrapper方法),生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个是一个优化问题。
& |: f2 W. K, y  d- w  ?) ~
2 E9 u2 w$ _3 J. _' E+ a! s8 _  [2 w: C- c3 E# o7 M
下面是PSO进行特征选择的代码(注意:整体代码是单目标只优化错误率,注意训练使用的是林志仁SVM,数据集是Parkinson,可以到UCI上下载,训练的结果是错误率)
* A* W' [  D/ a, s7 ?. t( Y& U4 ~0 |4 Z% Z1 Q6 X1 }3 _! Y
数据集分割为训练集和测试集:
; y3 k3 C1 q- K8 w( x/ W& e" I* r, M. B4 J. R7 j+ [
function divide_datasets
( \4 y9 H: I# F4 n  ?4 {& v' Yload Parkinson.mat;  y5 E4 ~+ g8 w- @* u) O
dataMat=Parkinson_f;
! w0 e  j/ S% j) Flen=size(dataMat,1);) Y  L9 P* ]) |0 L+ [
%归一化: ~) D+ ?& J9 m" G9 I8 H
maxV = max(dataMat);& K, E) R( [: y* I4 F/ W+ t- O
minV = min(dataMat);2 m5 F. d- f5 j. `. a
range = maxV-minV;
' L0 _4 [5 }6 L/ ~3 j$ T* r5 r) }newdataMat = (dataMat-repmat(minV,[len,1]))./(repmat(range,[len,1]));9 z5 V! Q% _  i5 W
$ s6 `3 ]7 t+ R) U
Indices   =  crossvalind('Kfold', length(Parkinson_label), 10);/ ~+ {  a) {) t
site = find(Indices==1|Indices==2|Indices==3);
& K9 y. t. |) w% Mtrain_F = newdataMat(site,: );4 k) B  y' ]) ~* K9 u) A
train_L = Parkinson_label(site);
3 |3 z7 X9 W+ ]( j1 {site2 = find(Indices~=1&Indices~=2&Indices~=3);* ~( L5 j; V! l* k
test_F = newdataMat(site2,: );& S' e% S$ q" I) Y  J9 X9 P
test_L =Parkinson_label(site2);
- ?; n2 @. B  Tsave train_F train_F;
( I3 l- i: V7 W1 V# x* V8 g4 [save train_L train_L;8 D+ b3 i; [( L  @6 T; s
save test_F test_F;' d$ a  n6 c+ m- m+ q4 ^: n
save test_L test_L;
7 p+ v$ ?, d+ C2 {9 Z8 l! Hend& M1 t7 d* m) m! C* M! q% B! r, B  g
( {% z( M; r8 G  s4 ?

$ e& I; k8 q1 M, X主函数PSOFS:! V& Q/ w7 C9 b) _& ~
' g$ M( }# a8 }) V
clear;
, u1 k1 Q2 J4 m8 b$ lclc;
+ z! h/ m# a$ q# g3 D9 dformat long;; h$ G* u6 X+ p3 x7 q
%------给定初始化条件----------------------------------------------
9 R1 c$ V: \& j  A; L* q/ m) ic1=2;             %学习因子1
- e" Y+ S# b0 ~7 j' y9 xc2=2;             %学习因子2
  Z9 \: {" [/ d$ lw=0.7;            %惯性权重
2 d' j3 j" G3 f7 EMaxDT=100;       %最大迭代次数; T! k  ~4 x4 J
D=22;             %搜索空间维数(未知数个数)! p1 V5 l+ C9 Q; ]1 x% \0 \
M=30;             %初始化群体个体数目6 e5 @, Z6 S: g
bound=1;
, c. ?3 j  Q! z) D: {. W+ e%eps=10^(-6);      %设置精度(在已知最小值时候用)( {' m$ `8 V* J
global answer      %最后所有粒子的结果(包括特征与精确度)# N1 z0 ?- r; F
answer=cell(M,3);
& M6 A" z6 x4 N0 Gglobal choice     %选出的特征个数. A' b4 ^) ~" z: M2 S
choice=0.8;
8 z, K9 X' K3 D  O/ O( w1 }
. s3 _7 M6 X' S" c& m- \%------初始化种群的个体(可以在这里限定位置和速度的范围)------------
4 K& Z" _& l5 g1 S- Z7 s; Y; k- Q* Z& n
x=randn(M,D); %随机初始化位置
0 _/ ]5 \, {0 V0 |9 @3 R- H( P. l- Ov=randn(M,D); %随机初始化速度! L+ _& A! w2 ^8 d% W) s6 U6 ^: k( Y
x(x>bound)=bound;
0 u! x* `& V) ?  L, z- lx(x<-bound)=-bound;4 ^3 [8 d9 V! N# e! A
%------先计算各个粒子的适应度,并初始化p(i)和gbest--------------------
: L. l% q0 f5 w* q# fdivide_datasets();
6 G8 P8 n9 j! ufor i=1:M6 B3 w8 w. Z3 A: Z  |# N
    p(i)=fitness(x(i,: ),i);
! Y- n5 i8 D$ u    y(i,: )=x(i,: );
: T. v+ p& C) S  ~1 l  t/ M* mend* S! D- y6 B/ t, f+ L$ J+ _6 g$ q& C
gbest=x(1,: );             %gbest为全局最优+ e& ]3 W+ ~" m4 ?2 D

: ]3 p( f9 L- ~) ]for i=2:M
/ Z" t# T' [  c3 b    if(fitness(x(i,: ),i)<fitness(gbest,i))/ ?( U' |$ A) b0 X- P5 z6 L/ m( S
        gbest=x(i,: );
1 V7 V/ F$ k% `% \! a: u    end
8 I( f6 n6 y! Hend( W6 y& p. d$ F- e% [

/ m* B( }6 p8 C  a% v: b+ w%------进入主要循环,按照公式依次迭代,直到满足精度要求------------+ l# L/ z$ f8 f2 P
for t=1:MaxDT0 w% \( o( Y& O- o
    for i=1:M
' j0 u' ^8 D& G* C, n1 F        v(i,: )=w*v(i,: )+c1*rand*(y(i,: )-x(i,: ))+c2*rand*(gbest-x(i,: ));
# |' _9 h  _' h* D! P        x(i,: )=x(i,: )+v(i,: );3 s# u2 u4 Z3 r) G
        if fitness(x(i,: ),D)<p(i)9 F- _/ P6 V& V. \
            p(i)=fitness(x(i,: ),i);/ [9 T& x8 T4 l7 T2 `: X0 N
            y(i,: )=x(i,: );; X1 r) S4 ?3 a- A; S
        end
( P; m6 Y; V2 y5 b0 I        if p(i)<fitness(gbest,i)
& J$ W* _& y( A/ Y  L1 b/ O& U            gbest=y(i,: );7 K* ]9 o; S: `! P2 p
        end8 Y* A5 }/ L: @: t; \/ u
    end( A; k7 S/ v" |" v
end
) _% J4 ?7 E" O6 f' E" n/ w( ?$ [) I! e. d: b3 C" S/ t: e
%------显示计算结果
2 N; @/ X2 z7 Q. ^* Y2 Y! Udisp('*************************************************************')% ]' u: Y! X/ M  u" j1 r7 I* H
Solution=gbest';4 S  i9 J" ]+ F  F9 j9 R6 G* `
Result=fitness(gbest,i);) K2 a: I% C# y
disp('*************************************************************')
6 n# k+ s4 b% U# e( e
4 S! x, Z  A' t" ]  N9 Y
  a# f# ~- I) L2 A  u. @特征选择评价函数(利用林志仁的SVM进行训练):
1 c& v2 m7 d9 T8 X# g. U( U) g, Q# G# T. l
function error = fitness(x,i)
& P' q) A8 K( s. c; I4 {0 Qglobal answer0 _( v0 B* q5 j4 O! G
global choice" h" p' {8 U. O2 [8 r0 X
load train_F.mat;) |5 G- S5 N" T
load train_L.mat;( n/ U( B6 e0 o- a9 d4 r
load test_F.mat;7 |) w. m4 P7 U. ?6 ^+ a4 d
load test_L.mat;
" {" b2 L5 Z- f" G6 e# a, F, V
% K( [7 K! m1 @, S3 |+ c' Zinmodel = x>choice;%%%%%设定恰当的阈值选择特征: E* o8 K; G$ I
answer(i,1)={sum(inmodel(1,: ))};2 N/ X! ]2 G. o8 w/ c0 j
model = libsvmtrain(train_L,train_F(:,inmodel));
! C$ |- o. N( ?2 c. G  @[predict_label, ~, ~] = libsvmpredict(test_L,test_F(:,inmodel),model,'-q'); * N1 t3 ]  P& K" G" \0 r* D
error=0;4 l) O/ t+ Z! r8 M
for j=1:length(test_L)7 X2 R. Z: X! H5 B( I
    if(predict_label(j,1) ~= test_L(j,1))( w7 w$ Y0 E, K8 z5 u1 z- D
        error = error+1;5 g6 I/ @) x/ b1 i0 s
    end" K" S* {* w$ c: y, L7 e5 t
end
5 q4 Z. B# c  k* q) S' k( h, derror = error/length(test_L);# w, Y% H4 L4 W
answer(i,2)={error};/ W. F8 C) Q; g- h
answer(i,3)={inmodel};9 s( \& K# H) n& r' Q8 q. ~
end& x% h/ M% u  `* `* f5 M
- m; r+ [8 Y* u2 ]5 J
' J8 l7 K6 M! E2 A. h
结果(选出的特征数和错误率): 6 j2 g- J8 ~3 I" t
特征数:3
3 `- D: _3 _4 _8 o1 j错误率:0.15448 V- O5 `- x# p* O4 Q
7 b) {' Q- H- N" w4 G. i. u, P

0 O6 ~, G/ r6 z1 N  e
+ i% y& x4 P% C# _$ q* q4 l

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 00:43 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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