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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2020-5-20 14:28 编辑
! U' f5 m/ e* n
3 C9 c; U- B& x6 VPSO进行进行特征选择其主要思想是:将子集的选择看作是一个搜索寻优问题(wrapper方法),生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个是一个优化问题。1 p: c, @# J$ G# t

: r/ W4 C5 X# g3 |3 i9 ^9 m
6 ?8 J) L5 t5 O下面是PSO进行特征选择的代码(注意:整体代码是单目标只优化错误率,注意训练使用的是林志仁SVM,数据集是Parkinson,可以到UCI上下载,训练的结果是错误率)0 F: k- \/ Q3 ^5 h

* ?  A/ v+ z% k. ]- k1 f- r# l数据集分割为训练集和测试集:
# }6 t% q/ X5 `: k: s' E( y) [: d) V/ ]$ w% @: d
function divide_datasets
/ d$ c; P2 L2 w7 V: Y* b1 cload Parkinson.mat;: N7 x( i. j. E; O
dataMat=Parkinson_f;3 V1 `) \9 ^' M+ m! |
len=size(dataMat,1);: r. H) j* F; U  P& ]( a
%归一化4 l7 m' D3 g5 z' s. ~2 D
maxV = max(dataMat);0 W& P; U6 l7 d4 W1 r; u
minV = min(dataMat);
: s7 R& B4 ~' U2 [: k1 r: G0 grange = maxV-minV;
3 H" }1 m4 r9 A( jnewdataMat = (dataMat-repmat(minV,[len,1]))./(repmat(range,[len,1]));
. D/ d5 p0 K# t# b  ~  ?2 U2 n6 b5 ]9 h! p; x0 y' ?
Indices   =  crossvalind('Kfold', length(Parkinson_label), 10);1 i8 q( M3 s$ ~7 h
site = find(Indices==1|Indices==2|Indices==3);+ j6 h" h  c4 H. {
train_F = newdataMat(site,: );3 }: ^# O! Y3 s' T$ D  ?
train_L = Parkinson_label(site);
' R# l8 E$ C3 `9 _+ A, E2 Isite2 = find(Indices~=1&Indices~=2&Indices~=3);
* Z/ G( b" }3 l2 C% Htest_F = newdataMat(site2,: );8 f$ `( \, d6 `4 K- r
test_L =Parkinson_label(site2);
' U+ b3 p' X  `2 s* ?  ~& q+ qsave train_F train_F;' g/ M* S' N4 h- p& ]
save train_L train_L;
0 ?1 G% H& A3 C$ Msave test_F test_F;8 k( \# j  H4 S; w. v( W8 O4 G
save test_L test_L;
2 N0 l& S: D: ?4 ]1 t2 O: [7 {end0 R4 @! Y0 d: v$ {4 j0 Z
5 [7 C# i; y/ Q3 S

" m4 z: H7 `5 ^0 x  n主函数PSOFS:
8 w& `' t8 l3 t( x6 t- M$ T* c+ [) |( W  f4 C2 I( v
clear;
, r/ H6 H4 C  Qclc;; ?4 r9 L% l# K
format long;' G* R$ Y; g9 G/ s) E# g0 N
%------给定初始化条件----------------------------------------------
% q" x* |- d4 g$ e0 Cc1=2;             %学习因子1
$ x2 f: d$ b5 o$ ~% p! {* ic2=2;             %学习因子2
7 t" x" V7 c' h! b! k" ww=0.7;            %惯性权重; ?* [; j2 [# |: p! u3 i
MaxDT=100;       %最大迭代次数: Q; n, B! N. }/ @
D=22;             %搜索空间维数(未知数个数)
+ ]- R; _" q. Q! @% P" uM=30;             %初始化群体个体数目
- p3 r* |9 f$ e7 X) x- Y# {  Z- Bbound=1;4 u# b/ k1 ^5 {/ O0 e- O
%eps=10^(-6);      %设置精度(在已知最小值时候用)! N9 b; G6 E( v4 g# j+ I* a7 P5 i, _
global answer      %最后所有粒子的结果(包括特征与精确度)
6 r- u6 P, x/ A7 @5 O. F9 J) canswer=cell(M,3);( Q+ i5 ]- J7 B% D4 H
global choice     %选出的特征个数
! f+ s: C, Z4 Z; b' wchoice=0.8;
; ?& p  U4 r% C6 U" R4 O; ]1 R9 q. p% D  y! w, p  |; B: I
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------1 E" m& c: v$ C
/ ?1 u# S& O% a" k/ A6 g
x=randn(M,D); %随机初始化位置9 }& n5 |4 L. i: K2 g1 M2 P4 P
v=randn(M,D); %随机初始化速度
- a' v  U) \( S5 I4 a1 U+ `- K3 U) Dx(x>bound)=bound;% c# q& Y* x" P2 W& J
x(x<-bound)=-bound;
- y7 S9 |! A1 Z& ^0 ?%------先计算各个粒子的适应度,并初始化p(i)和gbest--------------------
! N5 o; Y# p! @2 Idivide_datasets();5 V6 h; l% m, m7 e: K) z
for i=1:M
, c( i6 W2 v: G9 b3 m- ~' W    p(i)=fitness(x(i,: ),i);0 @: K  Y, P" }7 K
    y(i,: )=x(i,: );% q9 p7 v" i: O
end1 J% I# n- {/ r; c( |! f7 V
gbest=x(1,: );             %gbest为全局最优% R1 m: K9 _: L4 _6 X; T

& Y# C/ R% Y+ mfor i=2:M( m# U6 M8 a* h5 `0 r! F9 q
    if(fitness(x(i,: ),i)<fitness(gbest,i))
6 F: u! g' b7 [% \' S6 f2 ^7 \, N        gbest=x(i,: );
$ Z3 u9 ?$ l: G: Y5 \    end( f* b1 T4 e) _$ x( e3 S# G
end2 ]( T. d6 u5 s; I- B) g
3 k; T+ q! a4 k% C9 h& p
%------进入主要循环,按照公式依次迭代,直到满足精度要求------------# R. W1 L7 b3 r& b
for t=1:MaxDT
6 {. F! R6 L: O    for i=1:M
$ R% c  W" ?8 D% q        v(i,: )=w*v(i,: )+c1*rand*(y(i,: )-x(i,: ))+c2*rand*(gbest-x(i,: ));/ c6 r. t! J5 r! ?# Z
        x(i,: )=x(i,: )+v(i,: );, i9 k1 ]% C: z  c# n
        if fitness(x(i,: ),D)<p(i)$ i8 ?6 K$ ^; m/ H
            p(i)=fitness(x(i,: ),i);
" O3 w4 O5 s4 O9 A/ C            y(i,: )=x(i,: );6 @  X( w+ H8 D5 z
        end
. ~8 u" q9 {6 J0 [        if p(i)<fitness(gbest,i)
( ^6 B1 A/ T+ e" _            gbest=y(i,: );
7 A& [: x' \/ V- e+ X5 V& C8 s, t        end8 ?$ B+ B( n- e" c; g2 e- @# S, t
    end
: s3 K5 l; C7 e7 `% T3 @end0 u) l3 N  e! \3 b# l% _8 i

, F3 V7 F2 j$ Q- H: E%------显示计算结果
, w- G: N2 Z" odisp('*************************************************************'), e, @# i) a* }* P
Solution=gbest';
8 [- M7 n/ J( ~' HResult=fitness(gbest,i);
$ J7 K6 N& I% A! V+ C' Sdisp('*************************************************************')
/ d9 C; a: b( Y' _: e& X3 _- \( d# O; Z/ A; M( w
- y% Z1 p  w: f" c& h
特征选择评价函数(利用林志仁的SVM进行训练):
1 r' G) l8 ?# Q, U2 Z/ v7 y; Q$ ?5 }3 Q3 p, a
function error = fitness(x,i)% m) ?% Q) Y3 r$ N  a4 \
global answer
: F6 h9 d6 F; `( @6 C* I& Vglobal choice  G  e% X; Y1 P! E* ?" m* t; _9 a
load train_F.mat;
2 T' N( k: Z* i6 E! |load train_L.mat;4 W; }) W2 _3 B; \# G
load test_F.mat;; P$ k# l' n" F; E
load test_L.mat;% j& W1 S/ D) k& X& T( G
0 h) z, `5 u! z2 z2 ?
inmodel = x>choice;%%%%%设定恰当的阈值选择特征* W1 `, j' r4 w
answer(i,1)={sum(inmodel(1,: ))};" C. D* S9 Q2 ~- y& `
model = libsvmtrain(train_L,train_F(:,inmodel));$ ^# f. _9 }$ {9 ^6 P) t; q
[predict_label, ~, ~] = libsvmpredict(test_L,test_F(:,inmodel),model,'-q'); 0 U) t  z" R# n6 v
error=0;
5 ?# H8 q5 J/ cfor j=1:length(test_L)7 o5 F# E4 x% H/ ]8 w) y' b  C: K
    if(predict_label(j,1) ~= test_L(j,1))2 j9 D7 _4 x7 o' X" o; |& }! ^  h
        error = error+1;
* V3 L- d4 A7 c  q6 t# N8 E: e    end  `# _" a' k0 O1 G2 S2 [
end5 _, T9 b! [2 V; n0 }" j
error = error/length(test_L);) q) K* h. j* q
answer(i,2)={error};: I6 Z4 s& Q3 ]% S4 y1 R0 ]/ W
answer(i,3)={inmodel};
& h' L% y8 f, F3 R9 o9 r; k& Mend
  F# e4 ^5 ^) i9 B# q# W% H% \- S* c4 K; [
6 X" e, |& v+ I2 l" l
结果(选出的特征数和错误率):
7 a: s* k& M4 ]! e$ c9 L4 `特征数:3
  p$ C7 Q! X0 J; e$ g" p( ]错误率:0.15445 {& \2 L2 ?, j8 B! T* J6 m8 p4 P

' J& `  m2 ~1 I& k
, Z. q; \* \: x2 c( q' I3 E2 ]! R% n* K7 n4 O6 h$ }

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-5 17:48 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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