FCBF算法的Matlab实现

FCBF算法的具体原理请参照本人的另外一篇blog(https://blog.csdn.net/tangxianyu/article/details/100551675),里面有详细的说明。本文主要说明基于Matlab的FCBF算法的实现。

算法实现

本算法是在MIToolbox的基础上进行的算法实现(工具箱安装及使用https://blog.csdn.net/tangxianyu/article/details/100562164)。令本算法基本参照了FEAST内的实现步骤,本人只是更改了一些变量名,加入一些中文注释:

function [selectedFeatures]=FCBF(features,labels,threshold)
%输入:
%features:输入的特征数据
%labels:输入的标签数据
%threshold:选择阈值
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%输出:
%selectedFeatures:输出最优的特征子集
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%By Tang Xianyu

%% 主函数
n_feat=size(features,2);%特征的个数
%n_samp=size(features,1);%采样的个数

classScore=zeros(n_feat,1);%初始化SUic的向量值为0

%t1=cputime;
for i=1:n_feat
    classScore(i)=SuCal(features(:,i),labels);%计算每个特征的SUic值
end

[classScore, indexScore]=sort(classScore,1,'descend');%将计算的SUic值降序排列
indexScore=indexScore(classScore>threshold);%删除小于阈值的特征
classScore=classScore(classScore>threshold);%删除小于阈值的特征

if ~isempty(indexScore)%判断是否为空
    curPosition=1;
else
    curPosition=0;
end

while curPosition<=length(indexScore)
    j=curPosition+1;
    preFeature=indexScore(curPosition);%确定已选择的主特征
        
    while j<length(indexScore)
        scoreFiFj=SuCal(features(:,indexScore(j)),features(:,preFeature));%计算特征间的SU值
        if scoreFiFj>classScore(j)
            indexScore(j)=[];%如果SUij>SUic,则删除该特征
            classScore(j)=[];%删除该特征后,后面的特征自动向前移动一位,所以不用j+1
         else
            j=j+1;%不删除特征情况下,j需要加1
        end
    end
        curPosition=curPosition+1;
end
selectedFeatures=indexScore;%最终赋值
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% SU计算函数
function SU=SuCal(f1,f2)
h1=h(f1);
h2=h(f2);
ig=mi(f1,f2);
SU=2.0*ig/(h1+h2);
end

疑问点

在采用Corral数据集对特征进行验证时,发现并不能有效的剔除冗余特征f6。最终选出来的是f6,f1,f2,f3,f4。不只是否是上述的程序有问题。

如有同仁作此方面的研究,发现问题,忘不吝在留言区指出来。多谢。

 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值