⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sffs.m

📁 一个用matlab写的特征挑选
💻 M
字号:
%----4.19编 SFFS  特征选择 成功!
clear;
clc;

%--------特征导入  请自行修改
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
%%%%%%%----------归一化
[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
%-------------------------特征选择开始啦!!
d=3;%d 是最终要得到的特征数  
chosen=[];%%表示已选的特征
chosen=[chosen 1 ];
%--------------------------------------------------------------------------
%--先用sfs法选入3个,否则下面的运算容易陷入死循环
for j=1:3   %选4个特征
    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((feature{i}-feature{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
%------------------开始
while d<13
 %-----------------------------1 选l个特征-------------------------------------
 %一个特征一个特征的选入
        J=zeros([1 30]);
        for i=1:30  
           [mm nn]=size(chosen);
            for p=1:nn
                 if i==chosen(p)
                    J(i)=0;
                    break;   
                 else
                      J(i)=J(i)-sum(sum((feature{i}-feature{chosen(p)}).^2));          
                 end
            end
        end
        mi=min(J);
        for i=1:30
            if J(i)==0
               J(i)=mi;     
            end
        end
        [ma1 we1]=max(J);
        chosen=[chosen we1];             
         d=d+1;
%-----------------------------2 去掉r个特征-------------------------------------
       [ch chnum]=size(chosen);
      J=zeros([1 chnum]);ii=0;  
      for i=1:chnum  %     去掉chosen中第i个的效果
      [mm nn]=size(chosen);
        for p=1:nn
              for q=1:nn    
                  if (chosen(q)~=chosen(i)) & (chosen(p)~=chosen(i))             
                    J(i)=J(i)-sum(sum((feature{chosen(q)}-feature{chosen(p)}).^2));  
                  end
              end
           
        end
      end
%        mi=min(J);
       for cc=1:chnum
            if J(cc)==0
                J(cc)=mi;
            end
       end
       [ma we]=max(J);
       if ma>ma1
        chosen(we)=[];
        d=d-1;
       end
   
end

[mm nn]=size(chosen);
tezh=[];
for i=1:nn
    tezh=[tezh feature{chosen(i)}];
end
%%%%%%%%聚类
[IDC,U]=kmeans(tezh,2);
       cc(IDC==1,1)=0;
       cc(IDC==2,1)=0.75;
g=reshape(cc,M,N); 
 figure,imshow(g);
%%%%%%%%%%%%计算正确率
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   





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -