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

📄 新建 文本文档 (3).txt

📁 利用最小互信息实现向量的特征选择
💻 TXT
字号:
function [tezhi,vector,J,feaflag]=kltransform(data,classnums,feanums,numsofone,selfeanums,panju) 

if(size(data,2)~=feanums) 
   data=data'; 
end 
if(numsofone*classnums~=size(data,1)) 
   disp('shu ru shu ju wei shu chu cuo') 
   return; 
end 
if(panju<0|panju>7) 
   sprintf('suo shu ru de panju ge shu bi xu zai %d he %d zhi jian,not %d',1,7,panju) 
   return; 
end 
sw=zeros(feanums,feanums); 
rx=zeros(feanums,feanums); 
sb=zeros(feanums,feanums); 
classmean=zeros(classnums,feanums); 
totalmean=zeros(1,feanums); 
totalmean=mean(data); 
a=zeros(feanums,feanums); 
plei=1.0/classnums; 
zongnums=classnums*numsofone; 
J=zeros(1,feanums); 
feaflag=zeros(1,feanums); 
vector=zeros(feanums,feanums); 
tezhi=zeros(1,feanums); 
for nums=1:classnums 
   classmean(nums,:)=mean(data((nums-1)*numsofone+1:nums*numsofone,:)); 
end 
for nums=1:classnums 
   for geshu=(nums-1)*numsofone+1:nums*numsofone 
      a=(data(geshu,:)-classmean(nums,:))'*(data(geshu,:)-classmean(nums,:)); 
      sw=sw+a; 
      rx=rx+(data(geshu,:)-totalmean(1,:))'*(data(geshu,:)-totalmean(1,:)); 
   end 
   sb=sb+(classmean(nums,:)-totalmean(1,:))'*(classmean(nums,:)-totalmean(1,:)); 
end 
sw=sw*plei/numsofone; 
 
rx=rx/zongnums; 
sb=sb*plei; 
 
if(panju==1) 
   [vector,a]=eig(rx);% panju==1, zi xiang guan ju zhen kl bian huan 
elseif(panju==2) 
   [vector,a]=eig(sw); %panju==2,lei nei li san du ju zhen kl bian huan   
elseif(panju==3) 
   if(det(sw)==0) 
      disp('this critia does not work,sw is singular') 
      return; 
   end 
   [vector,a]=eig(sb/sw); %panju==3,sb/sw kl bian huan  
elseif(panju==4)			%panju=4, lei ping jun xiang liang de zui you ya suo  
   [vector,a]=eig(sw); 
   baihua=zeros(feanums,feanums); 
   for feas=1:feanums 
      baihua(:,feas)=vector(:,feas)/(a(feas,feas)^(1/2)); 
   end 
   sbb=baihua'*sb*baihua; 
   [w,a]=eig(sbb); 
   vector=baihua*w;    
elseif(panju==5)      %panju=5,lei jun zhi xin xi ti qu?
   [vector,a]=eig(sw);    
 	for feas=1:feanums 
      J(1,feas)=vector(:,feas)'*sb*vector(:,feas); 
      J(1,feas)=J(1,feas)/a(feas,feas); 
 	end 
elseif(panju==6)       %panju==6,fang cha xin xi ti qu 
   [vector,a]=eig(sw); 
   leicov=zeros(feanums,feanums); 
   leitezhi=zeros(classnums,feanums); 
   for nums=1:classnums 
      for geshu=(nums-1)*numsofone+1:nums*numsofone 
          leicov=leicov+(data(geshu,:)-classmean(nums,:))'*(data(geshu,:)-classmean(nums,:)); 
      end 
      leicov=leicov/numsofone;    
      c=vector'*leicov*vector; 
      for feas=1:feanums 
         leitezhi(nums,feas)=plei*c(feas,feas)/a(feas,feas); 
      end 
   end    
   leitezhi;    
   for feas=1:feanums 
      J(feas)=0; 
      for nums=1:classnums 
         J(feas)=J(feas)-leitezhi(nums,feas)*log(leitezhi(nums,feas)); 
      end 
   end       
   %J=prod(leitezhi);  
elseif(panju==7) 
   [vector,a]=eig(sb); 
end 
tezhi=zeros(1,feanums); 
for feas=1:feanums 
   tezhi(1,feas)=a(feas,feas); 
end 
if(panju<=4|panju==7) 
   sumtezhi=sum(tezhi); 
   J=tezhi/sumtezhi; 
   xinxiRatio=0; 
   [b,sortorder]=sort(J); 
   d=feanums-selfeanums; 
   for feas=feanums:-1:1 
      if(feas>d) 
         feaflag(sortorder(feas))=1; 
         xinxiRatio=xinxiRatio+J(sortorder(feas)); 
      else 
         feaflag(sortorder(feas))=0; 
      end 
   end 
   sprintf('ti qu te zheng de xinxilv wei:%f',xinxiRatio) 
elseif(panju==5) 
   [b,sortorder]=sort(J); 
   d=feanums-selfeanums; 
   for feas=feanums:-1:1 
      if(feas>d) 
         feaflag(sortorder(feas))=1; 
      else 
         feaflag(sortorder(feas))=0; 
      end 
   end 
else 
   [b,sortorder]=sort(J); 
   for feas=1:feanums 
      if(feas<=selfeanums) 
         feaflag(sortorder(feas))=1; 
      else 
         feaflag(sortorder(feas))=0; 
      end 
   end 
end 
sortorder; 
%sprintf('yong de pan ju wei:%d',panju) 
%tezhi 
%disp('suo yong de bian huan ju zhen wei:') 
%vector 
%disp('suo ti qu de te te zheng de pan ju wei:') 
%J 
%disp('suo ti qu de bian huan ju zhen lie biao zhi wei:') 
%feaflag 
return 

⌨️ 快捷键说明

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