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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2020-5-20 14:28 编辑 , J& K8 ?. B( \# P  J' D5 T* V
3 |6 N; P, ^6 H6 `& [7 z
PSO进行进行特征选择其主要思想是:将子集的选择看作是一个搜索寻优问题(wrapper方法),生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个是一个优化问题。- T  m5 a) }, o% Z/ S+ p0 X0 ~& A

% g# K% c7 B- F. n/ j) ]+ h, [! X$ K1 E+ o$ p8 n( v! p% k
下面是PSO进行特征选择的代码(注意:整体代码是单目标只优化错误率,注意训练使用的是林志仁SVM,数据集是Parkinson,可以到UCI上下载,训练的结果是错误率)7 ]% c9 M! r0 h) R2 b9 a; [  c

7 ?' B6 x2 H4 p1 Q+ ~数据集分割为训练集和测试集:. j3 O0 l7 N7 y* ]8 _$ F
$ O( }( M/ j- x( }
function divide_datasets
: w5 h( e% a. \( i& Aload Parkinson.mat;5 F9 s, i* \& T
dataMat=Parkinson_f;3 X* e; _6 H' U& s
len=size(dataMat,1);
: _% v% s  s- h. A( ^" b' m/ _%归一化0 z& X# o, M  B$ {- K1 G
maxV = max(dataMat);
& L/ |) a5 Q7 I2 J8 N% sminV = min(dataMat);
: p/ D5 R" v  D  w7 J0 P5 Rrange = maxV-minV;+ X1 S  \6 k* B3 @- S- f0 v( F
newdataMat = (dataMat-repmat(minV,[len,1]))./(repmat(range,[len,1]));
" I; ^9 q( {1 K3 |) L2 p7 @: X# d
Indices   =  crossvalind('Kfold', length(Parkinson_label), 10);
5 Q. z. n7 ?1 ]; P5 {# A7 J1 Q( Xsite = find(Indices==1|Indices==2|Indices==3);
& L4 a+ d! z- Wtrain_F = newdataMat(site,: );4 q0 u" S) C- D$ V
train_L = Parkinson_label(site);
" G( B+ M  P" J  O6 a- B  msite2 = find(Indices~=1&Indices~=2&Indices~=3);2 e. A- W/ `; V
test_F = newdataMat(site2,: );+ d% A8 a4 U5 ^! b  D
test_L =Parkinson_label(site2);; b6 k* ?- |; N/ G* G/ ^
save train_F train_F;
# W- m* q7 s' h1 a- [. l: j0 Vsave train_L train_L;
* T! \9 ^6 n' u) B! Fsave test_F test_F;
& ?% J( k! L' @# R6 T2 O5 ysave test_L test_L;) w) i1 \% _: w5 U* J
end/ n2 n! G0 k. a! Z

: a3 }) l) W/ A0 d  s: I; k( W6 f1 Y0 e) _* A: ^" H) D) }% Y
主函数PSOFS:
/ G+ E) e  h4 E( v5 C9 U6 y: T$ I4 f, S- v
clear;* ^; a# q- m1 p2 I8 v1 E
clc;, m# w5 I  F' E" l' O3 u
format long;
/ J- w0 F1 j; g%------给定初始化条件----------------------------------------------) @1 d5 q+ p7 L& h/ I
c1=2;             %学习因子1
7 h0 x. v  a4 ?c2=2;             %学习因子2
6 k7 p  B; e6 o* k( G) i+ |w=0.7;            %惯性权重3 i2 @' G. p# F1 g$ e) T* A
MaxDT=100;       %最大迭代次数
8 i8 w" n' d, |; H8 D/ f: @D=22;             %搜索空间维数(未知数个数)3 u$ [& `7 c) r
M=30;             %初始化群体个体数目
3 c) G% ]  e) C; p0 L7 B$ Vbound=1;
4 A. @+ G1 Q* g* P( f* I% S& L& C%eps=10^(-6);      %设置精度(在已知最小值时候用)1 t' L5 o* h2 d2 [
global answer      %最后所有粒子的结果(包括特征与精确度)# Y# o$ G! A: o) @: a' c5 X
answer=cell(M,3);
; u( ^1 N! @0 Rglobal choice     %选出的特征个数+ a1 s8 A; ?. ?" n
choice=0.8;
3 H. r/ Q0 S" l3 J. l6 s' S- v& v& C' y* a* B
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------
3 f/ S6 \5 |5 o* P2 @* a  f6 h& e3 ]8 Z. ~( i7 l+ f* n
x=randn(M,D); %随机初始化位置
' N4 @" }( U4 {4 V  e  Rv=randn(M,D); %随机初始化速度
, m! d! z  _) Kx(x>bound)=bound;0 G. h" U3 {8 \- D0 G
x(x<-bound)=-bound;
- A9 G/ V  D* L: M' _! i. {%------先计算各个粒子的适应度,并初始化p(i)和gbest--------------------
7 C, R  z. S) w8 R4 s! }/ {divide_datasets();3 e2 S) k8 Z( W
for i=1:M& t# [! f* ?  j" m* \
    p(i)=fitness(x(i,: ),i);
0 J% B+ D7 Q' s0 n: A& W+ t$ p    y(i,: )=x(i,: );
. n! C3 U. ?& |% A4 t. ~9 Fend
# o2 C8 p6 o8 H  Xgbest=x(1,: );             %gbest为全局最优
! h- f* |% x0 H8 S8 {" p2 s6 e5 T$ Z$ Q! h. V, D
for i=2:M
( r) b1 W1 P, M    if(fitness(x(i,: ),i)<fitness(gbest,i))
( w/ n( ^: @% P5 x% r        gbest=x(i,: );
. a: u8 A3 s; y. p! b2 J" ^, V5 j    end
. V' U; O$ L" {/ C# B' Vend
; A8 T. T" s; B* o" y: Y8 ~) D" ?+ P- q7 F$ u) `
%------进入主要循环,按照公式依次迭代,直到满足精度要求------------0 B2 F4 t. b! c  S/ i0 n
for t=1:MaxDT. j, q: H3 T  C6 ^
    for i=1:M9 q8 H( ^3 g/ z  L! t% i
        v(i,: )=w*v(i,: )+c1*rand*(y(i,: )-x(i,: ))+c2*rand*(gbest-x(i,: ));, L3 A! K: \% W/ V3 b7 ]: W" [$ G
        x(i,: )=x(i,: )+v(i,: );
; k3 P! }2 w  ]$ f        if fitness(x(i,: ),D)<p(i)
$ e7 Q" ?5 n+ H% o  }: Q            p(i)=fitness(x(i,: ),i);
% ?  }; J! [, b4 c$ ]% i8 \            y(i,: )=x(i,: );3 n% H* b6 k% e5 q. Z' a6 U3 m- b9 O0 Q
        end
/ F( o4 p1 S9 i# l. {        if p(i)<fitness(gbest,i)6 Y& ~9 M. G* E9 b% t5 z
            gbest=y(i,: );
3 O$ _' t1 o( S3 B5 r! [        end3 @/ z: Y; g8 c& [, W
    end7 Y' @: \1 E3 h. [
end' x( s  Y. u# L2 A6 D: R* J
0 ?$ g5 {. v) T1 M/ e' j
%------显示计算结果4 V9 Y+ M5 D' J
disp('*************************************************************')5 B: ?( {: z) r; }3 ^8 L
Solution=gbest';0 J: X4 w* a! N" L; s+ \# V0 b
Result=fitness(gbest,i);! p$ E* s3 B0 S
disp('*************************************************************')1 b3 w6 i. {' d( M. u9 I7 T! L
9 ~( r1 C8 m* |! T

" ^' N- I+ f# k特征选择评价函数(利用林志仁的SVM进行训练):8 O0 {: `% |6 L5 L0 ?. n
5 S  r9 T8 s+ C. B
function error = fitness(x,i)
: ]+ d0 F3 Q7 B$ ~8 Fglobal answer0 W8 p& \* E" H
global choice5 E: |2 G5 w0 l; V8 }8 m
load train_F.mat;! F$ m! y% a' T# s3 p' b9 A3 H
load train_L.mat;
2 I+ z$ [( e% J( c* Rload test_F.mat;
6 C6 T6 `4 K2 C) rload test_L.mat;, ?, N- p7 k5 @2 B, ]/ I
3 d  c) B0 S* q8 Q, B
inmodel = x>choice;%%%%%设定恰当的阈值选择特征
$ b# c( h- F) Qanswer(i,1)={sum(inmodel(1,: ))};! L( t( ]) Z2 u8 o5 Z: E
model = libsvmtrain(train_L,train_F(:,inmodel));, N( y3 g" r" a# t" `( Q
[predict_label, ~, ~] = libsvmpredict(test_L,test_F(:,inmodel),model,'-q'); , ^/ p  e4 |) \& ]' B
error=0;
5 H5 l, W- }% ^for j=1:length(test_L)
1 ]* }/ i% T/ S1 X0 N    if(predict_label(j,1) ~= test_L(j,1))4 c4 Q$ U  h% d% o( R' T
        error = error+1;) X; H' ^4 @' M/ {
    end
7 U1 v  c) O+ V& y/ o) C3 ~end" h9 l' S% U9 c3 y1 b
error = error/length(test_L);
) R# U) j, R6 X5 r! R$ q3 u4 I- qanswer(i,2)={error};
9 |4 W0 m5 a' @. l& t, Zanswer(i,3)={inmodel};: }2 M( g, {4 e  [3 w
end
9 F( H4 H* M$ e( F* K+ U, r
- `8 O+ J/ a7 e: l% e0 _( _0 f* I+ o3 W  G
结果(选出的特征数和错误率): & v/ V. w& |* m$ L
特征数:3
: C7 j/ I9 h+ Z: j. A错误率:0.1544
! l6 D  t/ N. _* |- G
0 P) L$ q: m3 G8 a! ?5 r- N( q2 O4 K; |3 n* c- A( S9 a+ m" H  H
3 a: L0 P) w/ B

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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