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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2020-5-20 14:28 编辑
1 n! _% C+ \) D/ \3 M% r4 ]4 l
+ I) k$ {* H3 [: {0 @" X/ hPSO进行进行特征选择其主要思想是:将子集的选择看作是一个搜索寻优问题(wrapper方法),生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个是一个优化问题。
: ?& z9 c: g+ N1 ^6 @/ V" E" w0 W8 ]1 |7 X# f3 I, m( r' ?

2 m/ `7 ]- r" d1 p# R/ ]& J下面是PSO进行特征选择的代码(注意:整体代码是单目标只优化错误率,注意训练使用的是林志仁SVM,数据集是Parkinson,可以到UCI上下载,训练的结果是错误率)& v3 L$ J7 Q* {$ f
5 r; ]5 A0 [! s- n  d
数据集分割为训练集和测试集:5 a; p3 G! t/ [

$ p3 J! D0 Q/ |1 t- Jfunction divide_datasets6 l% P& J9 |4 D+ q2 S7 F4 u
load Parkinson.mat;% K0 R' ~3 \% M# U! A  i2 v! m" e8 }
dataMat=Parkinson_f;
/ |# O' f4 a/ m# L% C. Plen=size(dataMat,1);1 b" B, T' z! m* Z4 M% u2 L" N
%归一化* h- a1 ?: o2 `7 D# R  c
maxV = max(dataMat);' }. J* W8 V  }+ b3 i
minV = min(dataMat);
0 W/ F1 w8 d/ u: w  Yrange = maxV-minV;% D" W* W; ^2 m$ F2 p
newdataMat = (dataMat-repmat(minV,[len,1]))./(repmat(range,[len,1]));
+ X4 `2 P1 r, T! z. O% c
1 I; u" K8 G, u' \& s; MIndices   =  crossvalind('Kfold', length(Parkinson_label), 10);
5 C5 D8 D/ [8 Asite = find(Indices==1|Indices==2|Indices==3);; P7 V  L7 J, N: Z+ k
train_F = newdataMat(site,: );6 S. M2 k+ b# Z* c. l# ]" D) ?% u' J
train_L = Parkinson_label(site);
$ ~5 w' s1 f/ Y' Jsite2 = find(Indices~=1&Indices~=2&Indices~=3);4 U# j* I: i) D/ M/ K7 x* k
test_F = newdataMat(site2,: );
" o6 o( w* @6 z. Atest_L =Parkinson_label(site2);: X8 u$ f  i# C( ]
save train_F train_F;
; C2 f  i/ K& U& H! {; Q- lsave train_L train_L;
, P' I: `. ~! S' L# ~, c  g; Tsave test_F test_F;& g+ _# c! b- ~6 ~, ~
save test_L test_L;
" b# ^  Z2 U0 L; xend
$ s  h! y8 e$ Y+ Z
. S) B' E2 J5 c0 d3 ~; A  i0 r) d6 Y2 r0 B* f8 X# z. \
主函数PSOFS:
% A& a* W- N, C& i  x; W
" q: ~% N8 v8 w8 q/ r% b' @clear;: j' t- }$ J! D+ w5 x/ f
clc;$ ~; c  y" f8 Q# w8 g, I. R3 w1 Y
format long;
1 t7 C6 @2 w+ T" _%------给定初始化条件----------------------------------------------
5 i  O! j) A3 v! ^7 hc1=2;             %学习因子1
3 b; H; i' w* wc2=2;             %学习因子2
: t( u/ N& u! j2 t# }w=0.7;            %惯性权重, n* u. T+ D+ P& e6 ~/ q8 E+ x
MaxDT=100;       %最大迭代次数3 R- Q0 G6 b9 t" P. b( d& T  u
D=22;             %搜索空间维数(未知数个数)+ A6 D2 M8 P9 C& I
M=30;             %初始化群体个体数目
( B% X' R  a! pbound=1;% }: \8 H7 {5 _6 D
%eps=10^(-6);      %设置精度(在已知最小值时候用)" r# O0 \' l, }2 M1 D5 k
global answer      %最后所有粒子的结果(包括特征与精确度)
0 ^7 D7 L! l3 R8 Danswer=cell(M,3);
, e. k% p, i  c, }" l) Gglobal choice     %选出的特征个数
+ U5 G: R) [1 |& }; nchoice=0.8;
4 d2 Z+ f  Z2 k) R: s& n- ~% g5 `" W
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------0 j# \. R, d0 O% `4 d- Z# S
4 i  G& V& Q) k& k: O7 P, z- O
x=randn(M,D); %随机初始化位置5 \& T* t2 j. |( a, L' `
v=randn(M,D); %随机初始化速度' s; a8 `( D. h- P
x(x>bound)=bound;- _8 `! X6 f% ^% o
x(x<-bound)=-bound;
$ Q& \* m( \; X7 w%------先计算各个粒子的适应度,并初始化p(i)和gbest--------------------" F' ]* q4 b7 p, D. t# a2 J
divide_datasets();
+ W! u( ?; e. _for i=1:M
; q) g4 a! G- H" X2 z    p(i)=fitness(x(i,: ),i);# y% M$ f" o9 r2 A, f; |
    y(i,: )=x(i,: );
/ W) |( D1 w7 Q  @- g, @* `end
8 g4 S, T0 w* w- j9 g7 \gbest=x(1,: );             %gbest为全局最优
7 K# v0 X3 x4 n. W6 z- |$ o4 @2 v& L5 Q
for i=2:M- A% C. M, f/ n, n
    if(fitness(x(i,: ),i)<fitness(gbest,i))9 I: D! H( x( [+ }
        gbest=x(i,: );! {( z5 P9 P' @; H7 b! M/ x% Z
    end8 f+ w! M' o1 Y" J! q0 b
end# W; o% E% u3 [0 Z0 F& S

1 @# l" h  {, s* r% g%------进入主要循环,按照公式依次迭代,直到满足精度要求------------
# `4 f0 L; V9 }8 W' b2 l  ^9 gfor t=1:MaxDT
' \% c$ P8 Z; B% `# D    for i=1:M
3 G" N0 \% z/ M' \- a) D8 R/ M        v(i,: )=w*v(i,: )+c1*rand*(y(i,: )-x(i,: ))+c2*rand*(gbest-x(i,: ));! b% t( I7 m. g) x& V2 e. b
        x(i,: )=x(i,: )+v(i,: );* d: V3 i5 E9 ~6 L" N( F
        if fitness(x(i,: ),D)<p(i)& w9 |2 y0 @" ?  l! R. I" }! {
            p(i)=fitness(x(i,: ),i);
5 q0 ?' z0 h4 D$ L' {* D            y(i,: )=x(i,: );6 j! L7 y! i; l! r
        end
% s4 }& H; T8 M        if p(i)<fitness(gbest,i)1 V8 m6 p" \' P: `% o* L/ y
            gbest=y(i,: );. |! y7 T# m& f* T" @% M% {2 j) V
        end9 I0 K/ T: f8 d, x) S" _0 s
    end
# a) a3 w0 x  Q1 g# nend
4 N% B5 b) Q; g* o: f
+ ^# P1 y3 V7 d& z: ]%------显示计算结果5 b' M" O% H. q* r/ y
disp('*************************************************************')
) u6 R4 ~0 x& P( uSolution=gbest';
# _/ _( i% f+ k! J0 wResult=fitness(gbest,i);
1 e3 _$ B# U( [disp('*************************************************************')! b" g: N5 O; h3 D0 Z/ r

5 \/ D. A1 b- T7 j% M( K4 \5 W" m
) S' D0 Y+ U( E' @% I: W8 Z特征选择评价函数(利用林志仁的SVM进行训练):  @0 k9 c' r) x' \# G0 R

' l3 N7 ]2 N1 ]2 C% s2 Rfunction error = fitness(x,i)
" H# }+ |0 A! `6 Z  Tglobal answer
# @$ y* f5 M' U9 \- tglobal choice
2 m" q9 f% ~0 o; Pload train_F.mat;. [8 V" v% n- L5 N7 M& N
load train_L.mat;
9 C# Y" ]2 K+ ^) O1 p0 n7 ~load test_F.mat;/ l$ e6 x' [) \. h, l
load test_L.mat;
, Q+ n; t' |7 @+ |4 z/ X: q/ Y6 h/ H
inmodel = x>choice;%%%%%设定恰当的阈值选择特征
% }  G; {2 z0 x! K5 uanswer(i,1)={sum(inmodel(1,: ))};
7 r$ j9 N2 @4 P4 tmodel = libsvmtrain(train_L,train_F(:,inmodel));
, v# k9 s' j- a* R& E[predict_label, ~, ~] = libsvmpredict(test_L,test_F(:,inmodel),model,'-q'); 6 C6 f, |( |4 K
error=0;6 m2 a0 L* o! U$ H* U- I/ ^. r
for j=1:length(test_L)
- S' k# f% n. s# A6 g    if(predict_label(j,1) ~= test_L(j,1))
3 A  {. R6 T3 h8 |        error = error+1;  w/ j, T2 [1 W
    end
9 Y) C' H1 y. {# h6 f$ H* bend
. l% o+ l0 b7 uerror = error/length(test_L);# R5 U2 d7 y4 f0 F/ z
answer(i,2)={error};
( u6 I$ f7 V8 f5 {$ u3 [; }3 @' G: tanswer(i,3)={inmodel};
' h& L* m; @  x# j0 [# d0 Q2 Oend+ _$ ?3 q5 O) U4 X
+ H9 |& Y" L% n7 g) B6 i
2 u* Y1 e! H* P, H( F) H0 C6 Z  i
结果(选出的特征数和错误率):
# e- T4 Q# K/ D特征数:3
5 H' |1 a+ ~# ?$ @( k错误率:0.1544. q8 }, y8 {$ P# E, R4 s) u
- [8 {% r  I0 y# c6 ]

  p* b' n8 F. g- g1 P
/ g6 L! P* z6 R9 [. e% R7 n; A

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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