24小时热门版块排行榜    

查看: 1944  |  回复: 1

chyzh1986

新虫 (初入文坛)

[求助] 有用过reliefF函数的吗?

有用过这个函数的吗:
function W = reliefF(Dnolabel,Dlabel,Num,k,typeD,Topn)
这里面的参数都代表什么,应该怎么设置呢?要是有个例子就更好了,谢谢~

函数内容如下:

function W = reliefF(Dnolabel,Dlabel,Num,k,typeD,Topn)
%     
%      To achieve attribute ranking using reliefF         
%      Dlabel is the array of the label for each record        
%      The data in Dlabel should be format 1,2,3 and so on         
%      Dnolabel is the array of each record without label            
%      Num is loop time for randomly choose instance            
%      k is the number of nearest hits and miss choosed  
%      Weight is output and it is the ranking of each attribute           
%      typeD is the type of Nolabel data, if it is numerical,   typeD=0;   
%      if it is nominal attributes, typeD=1;
%
[y,x]=size(Dnolabel);
W = zeros(1,Topn);
%calculate the label probability
LabelRange=max(Dlabel)-min(Dlabel)+1;
LabelCount=zeros(1,LabelRange);
LabelP=zeros(1,LabelRange);
for i=1:y
    LabelCount(Dlabel(i))=LabelCount(Dlabel(i))+1;   
end
for j=1:LabelRange
    LabelP(j)=LabelCount(j)/y;
end
LabelP
%*********************************************
DistanceArray=zeros(y-1,2);
%Weight=zeros(1,x);
Weight=zeros(x,2);
Diff=0;      
for i=1:x
    dominoDiff(i) = max(Dnolabel(:,i))- min(Dnolabel(:,i));
end
%for each loop of random choose instance
for NumN=1:Num
    NumN
    %randomly choose a instance
    InstanceId = round([y.*rand(1)]);
    while InstanceId==0,
        InstanceId = round([y.*rand(1)]);
    end
    index = 1;
    %calculate the distance to the choosed instance for each other instance  
    for i=1:y
        if (i~=InstanceId)
            for j=1:x
                DistanceArray(index,1)=DistanceArray(index,1)+...
                    (Dnolabel(i,j)-Dnolabel(InstanceId,j))^2;
            end
            DistanceArray(index,1)=(DistanceArray(index,1)/x)^(0.5);
            DistanceArray(index,2)=i;
            index = index+1;
        end
    end
    %sort distance ascending   
    DistanceArray=sortrows(DistanceArray,1);
   
    Result=zeros(LabelRange,y);
    classSize = zeros(1,LabelRange);
    for i=1:y-1
        class = Dlabel(DistanceArray(i,2));     
        classSize(class) = classSize(class)+1;
        Result(class,classSize(class))=DistanceArray(i,2);
    end
     
    %for each attribute  
    MissW=0; %the initial value for the part relative Miss in the weight
    HitW=0; %the initial value for the part relative Hit in the weight
    for AttributeNum=1:x
        %calculate the difference of min-max value in this attribute
        diff = Weight(AttributeNum,1);
        if (dominoDiff(AttributeNum)<0.0000001)
            Weight(AttributeNum,1)=0;
            Weight(AttributeNum,2)=AttributeNum;
            continue;
        end
        
        %calculate the weight for each attribute              
  for i=1:k %k is the number of nearest neighbours chosen by user        
    idHit = Result(Dlabel(InstanceId),k );
            %for the Hits
            if(round(typeD)==0)
                diff = diff - abs( Dnolabel(idHit, AttributeNum) -...
                    Dnolabel(InstanceId, AttributeNum) )...
                    /dominoDiff(AttributeNum)/k;
            else
                if (round(Dnolabel(InstanceId,AttributeNum))...
                        ==round(Dnolabel(idHit, AttributeNum)))
                    diff=diff-0;
                else
                    diff=diff-1;
                end
            end
        end
        
           
        for c=1:LabelRange
            if (c==Dlabel(InstanceId))
                continue;
            end
            
            P=LabelP(c)/(1-LabelP(Dlabel(InstanceId)));
            for i=1:k
                idMiss = Result(c,i);
                %for the misses   
                if (round(typeD)==0)
                    diff = diff + P*abs( Dnolabel(idMiss, AttributeNum) -...
                        Dnolabel(InstanceId, AttributeNum) )...
                        /dominoDiff(AttributeNum)/k;
                else
                    if (round(Dnolabel(InstanceId,AttributeNum))...
                            ==round(Dnolabel(idHit, AttributeNum)))
                        diff=diff;
                    else
                        diff=diff+1;
                    end
                end  
            end
        end % for m=1:LabelRange
        Weight(AttributeNum,1)=diff;
        Weight(AttributeNum,2)=AttributeNum;
    end %  for AttributeNum=1:x
end % for NumN=1:Num
Weight(AttributeNum,1)=diff/Num;
Weight(AttributeNum,2)=AttributeNum;        
W1 = sortrows(Weight);
for i = 1:Topn
    W(i) = W1(x-i+1,2);
end
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

驹行千里

金虫 (小有名气)

以前听一个师姐汇报过 在人脸识别中 特征选择环节用过 貌似效果不错 不过没有具体了解过
新手上路,从零开始
2楼2013-09-18 10:43:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 chyzh1986 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[硕博家园] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +3 2JOx3r2CYEgw 2026-08-22 7/350 2026-08-23 03:43 by OEbVnUOu01ol
[论文投稿] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +3 2JOx3r2CYEgw 2026-08-22 6/300 2026-08-23 03:40 by OEbVnUOu01ol
[论文投稿] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 QTy3jDtz1uLt 2026-08-21 9/450 2026-08-23 03:04 by OEbVnUOu01ol
[硕博家园] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 2JOx3r2CYEgw 2026-08-22 6/300 2026-08-23 00:52 by OEbVnUOu01ol
[论文投稿] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +3 2JOx3r2CYEgw 2026-08-22 3/150 2026-08-22 22:03 by OEbVnUOu01ol
[基金申请] 93BebMhtakh前后11位开头都是大写 +7 且听虎啸 2026-08-17 8/400 2026-08-22 21:55 by 医学老男孩
[基金申请] 范进中举一文的中心思想 +3 zjuhero 2026-08-22 4/200 2026-08-22 20:02 by mycsru
[基金申请] 什么时候开奖? +7 CrisMessi 2026-08-18 8/400 2026-08-22 18:29 by 淀粉搬运工
[教师之家] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +4 2JOx3r2CYEgw 2026-08-21 4/200 2026-08-22 16:52 by sunzitan
[基金申请] 人气不行了 +8 fansofjerry 2026-08-21 8/400 2026-08-22 16:30 by zyqchem
[基金申请] 今天基金会出结果吗?20260819 +16 kkkl_v 2026-08-19 17/850 2026-08-22 16:12 by 阿布Abu
[基金申请] 今日不放榜?网传国自然预计 8 月 27 日可查结果 +16 医学老男孩 2026-08-20 20/1000 2026-08-21 21:13 by Ldrop2023
[基金申请] 时间戳又变了 +13 wuchongjun 2026-08-20 19/950 2026-08-21 17:21 by 紫杉醇
[基金申请] 让我中一个面上吧! +11 大萍1987 2026-08-20 13/650 2026-08-21 14:48 by 20120902066
[基金申请] 感觉是下周放榜了 +7 angus9576 2026-08-17 12/600 2026-08-21 13:38 by weiyin
[基金申请] 应该是下周三26日公布了吧? +4 哈哈蛤? 2026-08-21 4/200 2026-08-21 10:58 by Vivilian
[论文投稿] 投稿咨询 +5 wwm09 2026-08-17 7/350 2026-08-21 10:11 by 期刊论文帮手
[基金申请] 重要消息,中午系统在维护 +11 yuleib84 2026-08-18 12/600 2026-08-20 11:09 by xskun
[基金申请] 朋友圈看到的 +6 wangzilk 2026-08-18 8/400 2026-08-19 10:55 by Haru815
[基金申请] 今天维护系统维护 祝所有人 高中 +8 gjjjzhong 2026-08-18 9/450 2026-08-18 13:01 by 家与远方
信息提示
请填处理意见