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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2020-5-20 14:28 编辑
! d! G! Z+ M9 I; n- W  y
6 H) s! {& C1 [PSO进行进行特征选择其主要思想是:将子集的选择看作是一个搜索寻优问题(wrapper方法),生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个是一个优化问题。% i) _# a) g) q/ Y' }8 H: M$ p2 k

; e$ @- j7 _6 X+ d7 g8 l
) d# C  J6 X1 q3 Q" ~7 w" |下面是PSO进行特征选择的代码(注意:整体代码是单目标只优化错误率,注意训练使用的是林志仁SVM,数据集是Parkinson,可以到UCI上下载,训练的结果是错误率)
; x4 h: y. k$ R' z/ C: n# |
7 E% \  r9 y9 c6 q7 x6 R( i数据集分割为训练集和测试集:& A7 e# u2 w. y6 C* |" q
4 X: v. C1 |8 j  J$ B* k+ O% A
function divide_datasets
' c& }& J9 N2 M1 hload Parkinson.mat;4 m3 C5 b1 l3 l
dataMat=Parkinson_f;
8 _! x4 `8 i) P" w% t/ n* jlen=size(dataMat,1);
' ]4 L7 ~7 K  I8 t, E, n%归一化+ S( ^8 ?) p& ]
maxV = max(dataMat);
9 X5 p, z/ e1 V5 \) s" _7 G1 pminV = min(dataMat);
- H: @4 B: v4 |6 n+ F3 Arange = maxV-minV;
( `" q. D( I( h+ SnewdataMat = (dataMat-repmat(minV,[len,1]))./(repmat(range,[len,1]));
. D  d  H: Z8 V- g& K" i" X$ g) \9 I
Indices   =  crossvalind('Kfold', length(Parkinson_label), 10);  H# W. C; u4 p. a
site = find(Indices==1|Indices==2|Indices==3);
0 D# p) e) d- ~  g; n9 ztrain_F = newdataMat(site,: );
' ^) ^( j7 K. b7 H8 F7 Ktrain_L = Parkinson_label(site);0 b( l- A* I9 u% J% Z, U# i
site2 = find(Indices~=1&Indices~=2&Indices~=3);$ U' p, H& r" b9 f3 T% [
test_F = newdataMat(site2,: );
6 x( {  ?" S: r" j4 ~1 b/ k$ i# Dtest_L =Parkinson_label(site2);
  |" l9 d5 |) H5 usave train_F train_F;6 L, N7 j8 }3 {# [3 E5 z+ H. F2 w
save train_L train_L;
. p8 w0 o- x: J. P/ V' G& Z* C' u  zsave test_F test_F;) d" e, H$ f- P: \/ w
save test_L test_L;" ?- n1 i4 i0 D, P& M- Q( _. ^5 Y
end( S; F8 ~: r8 v8 n
' v4 s2 J9 s' v: P4 ^( E5 b% O* B& j( a

/ e, g- {9 {, _3 u主函数PSOFS:
  B$ m, w. H7 ?$ [- |3 U" v4 c: r% x( g! B: B) O8 n& a! y, ^" l
clear;
+ J, {. }3 W* o& Q2 E, d. Kclc;: @, u( {1 `) _" R6 W) W
format long;
  c$ |+ _2 I& u%------给定初始化条件----------------------------------------------
( |; N1 T6 k! W1 m/ G  h& n/ U+ [* tc1=2;             %学习因子1
) m* P% a: w$ X7 M" w. \c2=2;             %学习因子2) S) x+ a! H, t
w=0.7;            %惯性权重7 ^* S& U- q9 W. T) ^- N
MaxDT=100;       %最大迭代次数! q2 S& ~1 ~; \& d
D=22;             %搜索空间维数(未知数个数)* Y" j( W+ x2 n
M=30;             %初始化群体个体数目
% D' J. t( _$ Y( e$ r! X: ebound=1;: q$ K; E) G8 C7 c% p* \
%eps=10^(-6);      %设置精度(在已知最小值时候用)
# R6 c( }' ]# oglobal answer      %最后所有粒子的结果(包括特征与精确度)+ I. c7 w+ Q7 C7 X( ~) J
answer=cell(M,3);# [6 s( M' a: ]7 ^7 P4 s$ ?
global choice     %选出的特征个数
# R$ Z  v) G' y1 O5 Kchoice=0.8;- E- z) [; j  ?2 L
& Y' J: X0 p9 Y: [- X- e* ?0 o) a
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------5 z3 |, S6 |, Q! `5 `
7 l8 S& P) J; }: o6 g! @3 v
x=randn(M,D); %随机初始化位置
5 [  }( v' Q# w8 R! e3 Hv=randn(M,D); %随机初始化速度
5 W" I2 M: _' X! k/ C6 X+ c  p; ?x(x>bound)=bound;# `6 o4 P/ J9 j) R& [( x0 N5 _
x(x<-bound)=-bound;/ x/ @+ |$ p% g; ~( P* t. R# x: ?
%------先计算各个粒子的适应度,并初始化p(i)和gbest--------------------
1 y2 w9 E. p: Z1 F, R. \/ `divide_datasets();
$ D* k' ?5 K+ V- Wfor i=1:M
% T- o7 J6 y" f, k    p(i)=fitness(x(i,: ),i);  q) {0 K' ]4 s
    y(i,: )=x(i,: );
3 }; k' B" @6 Gend
: Q9 ^* d1 N6 H7 _. I( |9 Dgbest=x(1,: );             %gbest为全局最优
* w9 x) T8 E6 B
$ |" D' f  W  ^) L7 T8 Bfor i=2:M$ o0 }5 }6 w- x, j$ o2 b) S
    if(fitness(x(i,: ),i)<fitness(gbest,i))! v4 J% ^' B! i. x9 a6 L
        gbest=x(i,: );
: G/ i- {: ?  T% S  a  L1 ^    end
7 X# T3 Y" v" s3 h5 s2 Y6 cend( I! a4 r. Y6 _5 O) l

+ H6 G% U6 v2 i, @2 A9 i%------进入主要循环,按照公式依次迭代,直到满足精度要求------------( \9 j; J4 ~/ p4 f' w" E
for t=1:MaxDT0 U- K/ P* Y4 c0 g
    for i=1:M
- l* o( b8 w$ A& c! o& E( H        v(i,: )=w*v(i,: )+c1*rand*(y(i,: )-x(i,: ))+c2*rand*(gbest-x(i,: ));
' V1 b6 K. h, f/ j1 A$ c        x(i,: )=x(i,: )+v(i,: );: L. C+ I. n: ~0 V( T2 b
        if fitness(x(i,: ),D)<p(i). ^+ S  L2 Q, G# M7 U: N
            p(i)=fitness(x(i,: ),i);
. d7 W7 B1 q9 ]8 w! i" Y# z            y(i,: )=x(i,: );
2 A6 e5 _  p& k        end
, b/ m* L6 r  h2 e. a$ `2 d# P        if p(i)<fitness(gbest,i)4 W3 H5 U' k% ~, X1 F- D
            gbest=y(i,: );
/ \  u& V7 i5 j: c) }) ^        end" b1 f- [. t3 l
    end
% A; ~! ]( p/ l+ z% z8 fend' s! O; j# F$ V' B8 \- @
) n. Q) e- x" }8 s! b$ P% ^
%------显示计算结果
5 @" t) N$ X4 b2 d5 ?disp('*************************************************************')5 S; K2 G, S2 X5 O' ~$ I
Solution=gbest';
* _: u4 z9 k7 |9 n3 XResult=fitness(gbest,i);
4 j+ ]5 ?( N- a" ~7 _0 Adisp('*************************************************************'). T& }$ `7 ]* Z9 I( C4 i1 H
, Y% g+ ]. W- r' F0 K2 |/ E
, n& o: O( Q9 L* G" N
特征选择评价函数(利用林志仁的SVM进行训练):
# H0 ]2 {3 X8 H  b5 S3 F" m- d! Z# D9 [6 k2 J; X5 G
function error = fitness(x,i)
' _5 _( x4 s' ?! m) Bglobal answer5 y8 c. R& D6 D2 M+ n+ n1 \' `
global choice  W" M  f( |# h; R" y- z
load train_F.mat;: J" m& Z; O1 l: v
load train_L.mat;/ p9 m2 G. Q- M) D
load test_F.mat;
7 w7 t6 b/ c/ yload test_L.mat;
7 m+ Q% d" B: i9 W* f) W
" D6 W( G' C- S& z2 q- x" M6 f8 Ainmodel = x>choice;%%%%%设定恰当的阈值选择特征1 F; y9 e9 D$ G( i' h, L  q
answer(i,1)={sum(inmodel(1,: ))};
) e( c4 s* i: d& k% Bmodel = libsvmtrain(train_L,train_F(:,inmodel));
: C/ V; ]' r- S0 g% h7 {) y$ ~5 L[predict_label, ~, ~] = libsvmpredict(test_L,test_F(:,inmodel),model,'-q');
9 w8 B0 H9 a5 F* I7 d" r& k1 j/ yerror=0;
, G/ _$ \" T" t3 _3 gfor j=1:length(test_L)
- C/ N( U$ E  E" Q- ~7 S  o    if(predict_label(j,1) ~= test_L(j,1))
2 ^9 |3 d0 O4 X: X        error = error+1;
/ F# D: t3 `8 w" h8 W: _    end9 f7 ~/ ?4 Y% Y/ V  I; H# R
end5 |; H- j( k9 H4 i
error = error/length(test_L);4 K& O: t/ s1 g% g5 R
answer(i,2)={error};
0 d  C! f4 _9 i+ l8 S! `answer(i,3)={inmodel};
3 w- u, s1 x6 Iend
+ H0 A0 @4 j' O( x- _0 }) |2 m/ _1 O

& @  b, b- h" [# c  Z$ w. e结果(选出的特征数和错误率): - ^! D8 W  j6 Q; b0 e; _
特征数:3 & A( O- F, P! `& c7 ^8 s
错误率:0.1544
5 [+ A& d. y% c
1 ^5 _& B* X- v% N9 B* F4 K5 q$ ^; ?/ ^9 u
/ j/ U0 c2 E. z* P) d

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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