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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2020-5-20 14:28 编辑
. p2 C. s/ T7 }; r, Q
/ [) f* ^: `; U6 ]+ A- a* `PSO进行进行特征选择其主要思想是:将子集的选择看作是一个搜索寻优问题(wrapper方法),生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个是一个优化问题。9 L& U) O7 E. T
, v; Y5 ?, I3 x# e- _
- u0 o9 m1 n: _) s" i. g% S6 y6 z. d
下面是PSO进行特征选择的代码(注意:整体代码是单目标只优化错误率,注意训练使用的是林志仁SVM,数据集是Parkinson,可以到UCI上下载,训练的结果是错误率)
  C+ }) u! A2 u% b" `( R
- I7 Y5 n, j) p7 e- H: ?数据集分割为训练集和测试集:% |! B' J4 D5 l# P: H

1 y+ I( \- }  {8 ?4 H. Ifunction divide_datasets
# f) K) z$ j2 M0 z  Eload Parkinson.mat;3 s4 ]( [& z2 M' F  y
dataMat=Parkinson_f;
- s! T5 }, x9 T. vlen=size(dataMat,1);
9 {" `2 c3 E7 R. m%归一化
/ [$ q" ]- s1 Y4 ]maxV = max(dataMat);
, X  r0 c, p6 E5 ?) b, ZminV = min(dataMat);- T, |& b' a7 q  \+ R
range = maxV-minV;4 Y% U# n- ^1 n% F$ z! f, W
newdataMat = (dataMat-repmat(minV,[len,1]))./(repmat(range,[len,1]));
& I% t( |  x) c1 U0 |: n. d+ n- i. U6 M4 u4 G2 t9 v
Indices   =  crossvalind('Kfold', length(Parkinson_label), 10);
! Z( W4 W& w$ |+ I. zsite = find(Indices==1|Indices==2|Indices==3);, S4 y  }) ^: o) p% H+ [
train_F = newdataMat(site,: );+ i- z2 R3 `& F( p
train_L = Parkinson_label(site);
" f; D8 \( f6 A" c/ t) @, w$ usite2 = find(Indices~=1&Indices~=2&Indices~=3);
& s1 c) T' {) atest_F = newdataMat(site2,: );' k( U$ M, {; C/ D: d9 e+ ?" }0 T
test_L =Parkinson_label(site2);
) ~  I& a  T$ u1 Usave train_F train_F;4 n( u  R2 F: L3 w
save train_L train_L;
. a8 {/ l) h! nsave test_F test_F;9 ~6 F/ @7 _: A  q
save test_L test_L;# U7 C3 m; `9 s- [) K2 i
end
% f: N: L' {" k! q  T4 L7 s
. e. l0 o- T" q1 N' T& \) V% w. K5 Q9 t- ]2 [' Y6 }
主函数PSOFS:  }8 y0 ^+ U- r7 ?0 l6 D0 R

! x& s, h6 w' ]# Y& }$ n) I* x& bclear;# {! |+ ?) o# v+ B
clc;$ f/ `+ g- u5 A0 B# N* [. M1 a
format long;
' m' r: C; v: @& Z%------给定初始化条件----------------------------------------------- ]+ T: i4 i9 @; Y/ X6 j8 Y
c1=2;             %学习因子1
( m1 ]6 G3 F* M% C, v$ cc2=2;             %学习因子2
, B) Y6 X4 F' Z* ?3 Kw=0.7;            %惯性权重! r$ D7 ]+ Y; H
MaxDT=100;       %最大迭代次数
( H6 J6 ?1 z  ]" @) h) GD=22;             %搜索空间维数(未知数个数)1 M, x. W7 J$ D
M=30;             %初始化群体个体数目- m# l7 s1 U0 H0 t! C& Z; }
bound=1;- M3 d9 V  Z( x( N. p) M2 Q' N
%eps=10^(-6);      %设置精度(在已知最小值时候用)
, j; I! I( f; i2 m$ _& F/ ~  C# Gglobal answer      %最后所有粒子的结果(包括特征与精确度)$ t6 Q0 ~0 O7 `" I" H; b' U3 R! d7 G
answer=cell(M,3);
) d2 _' N3 K! G  F& V/ Qglobal choice     %选出的特征个数; Z* e: J) U4 X# Y
choice=0.8;. m8 X. x$ X; @  u. p+ j. y# C
# J5 S) R, _. o( w/ ?1 C
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------
. ?8 s% Z: ?+ D) H
% G& O! R. h. ^x=randn(M,D); %随机初始化位置
) V; J; H# C* q# x8 wv=randn(M,D); %随机初始化速度' D: L, e& q) k* d8 B9 D$ B
x(x>bound)=bound;
9 y* m" p% U' l5 V9 ox(x<-bound)=-bound;8 R& h- M6 @8 c1 n! g
%------先计算各个粒子的适应度,并初始化p(i)和gbest--------------------! o- L! {0 J( x& w' j3 h0 l+ h
divide_datasets();7 W# E9 v* N9 f7 p+ Z( @5 \3 v# _/ Q
for i=1:M
9 z0 p/ K7 Q* S* B6 @* U( t  e    p(i)=fitness(x(i,: ),i);' A! ?' {9 J1 i7 {; U
    y(i,: )=x(i,: );
1 z' {) x; J. q/ z' o  _' mend
: d2 W( U) B6 k! ngbest=x(1,: );             %gbest为全局最优, [; l# d3 D8 r
  S3 _9 c7 ?: d
for i=2:M
) H% `4 Z" w+ J; I# o    if(fitness(x(i,: ),i)<fitness(gbest,i)). @0 h# T! C; Z& I1 V0 J4 G3 {
        gbest=x(i,: );. f2 Z. p: j1 x, ?* a# L
    end" H8 |* B9 w5 g9 ~2 ~' a/ V
end
; ^5 }) }. x4 j! ^+ G6 @9 G. }: h  d) R( i
%------进入主要循环,按照公式依次迭代,直到满足精度要求------------8 G' Z; a0 X; m. C3 M
for t=1:MaxDT/ V7 t, m. ~- b2 q) E
    for i=1:M
5 T) N0 I: U0 ?# L        v(i,: )=w*v(i,: )+c1*rand*(y(i,: )-x(i,: ))+c2*rand*(gbest-x(i,: ));! v" u5 i) Y6 m) i$ C" o+ F0 z" ]9 s8 Z
        x(i,: )=x(i,: )+v(i,: );. i" x9 b$ q* v
        if fitness(x(i,: ),D)<p(i)
: c/ A/ ~+ k# [$ }. A            p(i)=fitness(x(i,: ),i);
/ W2 }) {) h2 c/ |            y(i,: )=x(i,: );6 n  ?/ M; ]; K& k2 d' o
        end4 Z7 v; c. Y  ?3 e; n: ~$ G4 F
        if p(i)<fitness(gbest,i)- e. a% q' J& X; X$ }' T
            gbest=y(i,: );( T9 g2 |" [+ V" p/ T% T6 g
        end
& L" s1 F% b7 o" `* D6 Q    end& ~. d: J3 G  g' l4 S  ~
end- \- L, Q. I3 q9 l4 g
7 `( @: t; C! S# K) ]! l0 l; g
%------显示计算结果% W5 x# e2 C  ~, {
disp('*************************************************************')8 I* P2 f7 m6 g  g6 F
Solution=gbest';
) l: w+ T$ T) t" OResult=fitness(gbest,i);
- g- r) i6 c; ydisp('*************************************************************'). B" R7 G# ]% j- M1 o/ H
, @+ b7 W" K/ i5 v5 D# @" \
2 x! C2 w1 g' d+ [- _" [. }5 l- P
特征选择评价函数(利用林志仁的SVM进行训练):
( v9 [6 e; j& {" q( U1 S- f9 m5 o
function error = fitness(x,i)' a8 y( W4 }5 {1 d2 G  x" x1 I# U( d
global answer4 @$ O3 U6 B  L- b) P# M! u/ T, p
global choice9 ~6 d' X" ^  h+ I8 Q. S4 B# y
load train_F.mat;. |; d* L. [* I. W: l9 Z" z
load train_L.mat;
! ?+ y) @' c5 ]! K8 q% o+ l& @+ Pload test_F.mat;
% u- q# I7 }, j7 t" j- f: E! jload test_L.mat;
3 a! F; l/ w2 ^- ]' M# c
$ B1 q! q6 V5 I7 B; J6 h, oinmodel = x>choice;%%%%%设定恰当的阈值选择特征- n% C) J& I. Q* V: w! m2 t* O
answer(i,1)={sum(inmodel(1,: ))};
! l# k3 @/ v$ l- \model = libsvmtrain(train_L,train_F(:,inmodel));
" n/ R8 d' r5 o[predict_label, ~, ~] = libsvmpredict(test_L,test_F(:,inmodel),model,'-q');
+ y8 Y2 X% L* g' Q' h7 Ferror=0;
+ i& f4 L% r+ K6 w% l, Y' [/ b$ Jfor j=1:length(test_L)
& I. y) K4 E5 r& [    if(predict_label(j,1) ~= test_L(j,1))& U0 ~/ Q/ `9 m( J
        error = error+1;
4 o  l6 A; Q( Q) G& E    end
9 S: i; M; S2 Vend
1 J/ j5 M! i0 T- I3 @error = error/length(test_L);8 K% d5 I7 `! }0 U2 p% r% q6 j
answer(i,2)={error};
# ~+ i4 Z5 t9 \0 u) Q0 r- Lanswer(i,3)={inmodel};2 _; ]- `0 l# M" P! ^0 i/ Z% P) g+ t
end2 l# g6 o8 q9 U, r8 G3 y6 h9 T
& F5 R1 x- S  a

' Z! U0 r) W) _" b结果(选出的特征数和错误率):
4 u( B2 W" |6 ~) \. N特征数:3
6 p* k$ ~( t) x/ `+ @- C错误率:0.15447 m7 p+ W. L* Q9 N2 P+ i: ^5 w
7 `/ p, Y& S+ |- u' M) z; q

! P' k% Z) A' l' L
* K" i6 R+ T; f* a. n

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-26 13:34 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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