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

SFS与SBS特征选择算法

[复制链接]
  • TA的每日心情

    2019-11-20 15:22
  • 签到天数: 2 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2020-11-6 15:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

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

    x
    ! T# ?2 P' F* }$ {
    (1)序列前向选择( SFS , Sequential Forward Selection )
    # w$ U0 ^/ B: J( u$ B) A# v" w, P- A6 H0 h+ \5 \9 _
    算法描述:特征子集X从空集开始,每次选择一个特征x加入特征子集X,使得特征函数J( X)最优。简单说就是,每次都选择一个使得评价函数的取值达到最优的特征加入,其实就是一种简单的贪心算法。
    1 x! {( t4 e% B% p: A5 [! p
      X, G: r/ C) @' G* ^ ; l( b2 k) T( X0 l9 w0 k: O2 g

    5 X3 A8 l9 t0 P' s9 x3 m5 c- d / p1 w( C! c9 w0 c$ l

    $ [% q1 z: x- I- z0 `3 d+ o算法评价:缺点是只能加入特征而不能去除特征。例如:特征A完全依赖于特征B与C,可以认为如果加入了特征B与C则A就是多余的。假设序列前向选择算法首先将A加入特征集,然后又将B与C加入,那么特征子集中就包含了多余的特征A。
    ( X1 U: g4 \3 \5 V- ]- k- Z% N5 D1 X5 i2 D6 h
    代码:3 p0 O% {' A( w7 g

    $ v/ L( z# h, J( z+ O
    • %----4.17编 顺序前进法特征选择 成功!
    • : I6 j, p0 U$ Q$ h# B
    • clear;
    • clc;
    • %--------特征导入  请自行修改
    • 6 l2 F" e$ b- z+ x( Z7 `
    • M=512;N=512;
    • load coouRFeature16_0521_Aerial1 %%%共生矩阵 96.14%
    • wfeature{1}=coourfeature(:,1);
    • wfeature{2}=coourfeature(:,2);
    • wfeature{3}=coourfeature(:,3);
    • load  fufeature_0521_SARAerial1_512%%复小波  98.26%
    • for i=1:13
    •     wfeature{3+i}=wavefeature(:,i);
    • end
    • load wavefeature_0521_SARAerial1_512%%%非下采样小波  97.58%
    • for i=1:7
    •     wfeature{16+i}=wavefeature(:,i);
    • end
    • load wavefeature_0521_Aerial1%%小波 97.65%
    • for i=1:7
    •     wfeature{23+i}=wavefeature(:,i);
    • end
    • % load rwt_cofeature96_0423_lsy1
    • : L' K( K3 X1 a& ^3 i2 _5 `
    • % for i=1:96

    • $ e/ Q9 j" `0 y, p' C( ]: E2 J
    • %     wfeature{30+i}=feature(:,i);

    • ( H  `4 v( X/ N) s3 V; n- O7 j. J- u5 J
    • % end
    • ; @/ T5 X+ v3 R/ \1 |$ e. u
    • %%%%%%%----------归一化
    • * A& y( Z, `, ]3 R& W
    • [m n]=size(wfeature{1});
    • for j=1:30%一共30组特征 这里 请自行修改
    •     mx=max(wfeature{j});
    •     mi=min(wfeature{j});
    •     mxx=(mx-mi);
    •     mii=ones([m n])*mi;
    •     wfeature{j}=(wfeature{j}-mii)./mxx;
    • end
    • %%---------------SFS  先选4个特征尝试
    • , z5 _' ?6 F" r" A& V$ H' @9 X
    • chosen=[];%%表示已选的特征
    • chosen=[chosen 1];
    • Jc=0;%%选出的J值
    • for j=1:5  %选5个特征
    •     J=zeros([1 30]);
    •   for i=2:30  %一共30组特征 这里 请自行修改
    •     [mm nn]=size(chosen);
    •     for p=1:nn
    •         if i==chosen(p)
    •             J(i)=0;
    •            break;
    •         else
    •           J(i)=J(i)-sum(sum((wfeature{i}-wfeature{chosen(p)}).^2));
    •         end
    •     end
    •   end
    •   mi=min(J);
    •   for i=1:30
    •       if J(i)==0
    •            J(i)=mi;
    •       end
    •   end
    •   ma=max(J);
    •    for i=1:30
    •       if J(i)==ma
    •           chosen=[chosen i];
    •            break;
    •       end
    •    end
    • end
    • save Aerial1_6t_chosen chosen
    • [mm nn]=size(chosen);
    • tezh=[];
    • for i=1:nn
    •     tezh=[tezh wfeature{chosen(i)}];
    • end
    • %%%%%%%%聚类
    • & A! O( H" {3 |2 Y( N( I' B
    • [IDC,U]=kmeans(tezh,2);
    •        cc(IDC==1,1)=0;
    •        cc(IDC==2,1)=0.75;

    • / o: M, g9 e" _% @
    • g=reshape(cc,M,N);
    • figure,imshow(g);
      / j! {) ~* T; h+ u0 ]/ y" a, {/ ?
               6 p( o& }' C' C+ I
    * t  A: R) N# ]! f- V1 w( u
    (2)序列后向选择( SBS , Sequential Backward Selection )
    # f7 k+ ^" B8 y  ?. G$ C5 @9 Z" X0 W% N& u4 m% P- e
    算法描述:从特征全集O开始,每次从特征集O中剔除一个特征x,使得剔除特征x后评价函数值达到最优。
    1 P" w7 P$ F$ `% ~3 B: |- V7 \  n9 }$ V# n' d5 X5 x4 X
    算法评价:序列后向选择与序列前向选择正好相反,它的缺点是特征只能去除不能加入。; \5 y7 C- Z9 g: C" L/ O0 p

    3 }  Y1 E: F8 h( }, J. Q- c3 K
    $ T! e- C% F6 m$ O# H; f9 |/ z8 V8 v# B
    % ]4 r1 i* Q% ^+ ^3 \, X代码:8 i4 @3 k% K* ]

    8 T9 G+ i3 x3 O( ]! p
    • %----4.17编 顺序后退法特征选择

    • : S1 x7 w' R9 F  `' X
    • clear;
    • clc;
    • %--------特征导入  请自行修改

    • - {( l$ `. _' k/ j, |! I3 A
    • A=imread('lsy1.gif');
    • [M N]=size(A);
    • load coourfeature_0414_lsy1 %%%共生矩阵 96.14%
    • feature{1}=coourfeature(:,1);
    • feature{2}=coourfeature(:,2);
    • feature{3}=coourfeature(:,3);
    • load fuwavefeature_0413_lsy1 %%复小波  98.26%
    • for i=1:13
    •     feature{3+i}=wavefeature(:,i);
    • end
    • load wavefeature_0413_feixia_lsy1%%%非下采样小波  97.58%
    • for i=1:7
    •     feature{16+i}=wavefeature(:,i);
    • end
    • load wavefeature_0417_lsy1%%小波 97.65%
    • for i=1:7
    •     feature{23+i}=wavefeature(:,i);
    • end
    • %%%%%%%----------归一化-归一化

    • 1 e, W& ^9 g4 B3 V
    • [m n]=size(feature{1});
    • for j=1:30%一共30组特征 这里 请自行修改
    •     mx=max(feature{j});
    •     mi=min(feature{j});
    •     mxx=(mx-mi);
    •     mii=ones([m n])*mi;
    •     feature{j}=(feature{j}-mii)./mxx;
    • end
    • %%---------------SBS
    • , j5 G1 y6 `8 s
    • chosen=[];dele=[];
    • for i=1:30
    •     chosen=[chosen i];
    • end

    • 4 `& x( {& G- Q0 ~4 f- {, r( V
    • for j=1:24   %%删10个,留20个
    •     J=zeros([1 30]);ii=0;  %J(1)是删1的结果,J(2)是删除2 的结果......
    •     for i=1:30  %???dele 是必要的么???????????????????????%一共30组特征 这里 请自行修改
    •     [mm nn]=size(chosen);
    •       for p=1:nn
    •           if sum(i==dele)~=0
    •               J(i)=0;
    •               break;
    •           else
    •               for q=1:nn
    •                   if (chosen(q)~=i) & (chosen(p)~=i)
    •                     J(i)=J(i)-sum(sum((feature{chosen(q)}-feature{chosen(p)}).^2));
    •                   end
    •               end
    •           end
    •       end
    •     end
    •      mi=min(J);
    •      for cc=1:30
    •          if J(cc)==0
    •              J(cc)=mi;
    •          end
    •      end
    •      [ma we]=max(J);
    •       dele=[dele we];
    •       for dd=1:nn
    •           if chosen(dd)==we
    •               chosen(dd)=[];
    •       end
    • end
    • % chosen=[2 4 5 6 7 8 9 11 12 13 14 19 20 22 23 26 27 28 29 30];
    • $ J8 G) ], C, t: H; s( ^# |: {: P
    • [mm nn]=size(chosen);
    • tezh=[];
    • for i=1:nn
    •     tezh=[tezh feature{chosen(i)}];
    • end
    • %%%%%%%%聚类
    • ; p/ U2 W8 B5 C! T0 S' d3 l5 b# a
    • [IDC,U]=kmeans(tezh,2);
    •        cc(IDC==1,1)=0;
    •        cc(IDC==2,1)=0.75;
    • g=reshape(cc,M,N);
    • figure,imshow(g);
    • %%%%%%%%%%%%计算正确率

    • 0 Z3 q$ l3 F! O6 e1 g! u5 W! x
    • ju=ones(M)*0.75;
    • for i=1:M
    •     for j=1:M/2
    •         ju(i,j)=0;
    •     end
    • end
    • ju2=g-ju;
    • prob=prod(size(find(ju2~=0)))/(m*n)
    • 1-prob& C2 ]* K+ i( ~) y" y
             
    2 r( W" n) F8 s  y$ e8 O: F
    : t, K0 ^9 O5 p: {3 F. x另外,SFS与SBS都属于贪心算法,容易陷入局部最优值。
  • TA的每日心情
    慵懒
    2020-6-13 15:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-11-6 16:14 | 只看该作者
    SFS与SBS特征选择算法
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

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

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

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

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