24小时热门版块排行榜    

查看: 1877  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 08工学调剂 +12 用户573181 2026-03-20 17/850 2026-03-24 21:45 by 番茄炖了西红柿
[考研] 资源与环境 调剂申请(333分) +7 holy J 2026-03-21 7/350 2026-03-24 17:24 by xiaohai104
[考研] 344求调剂 +3 desto 2026-03-24 3/150 2026-03-24 10:09 by 搏击518
[考研] 276求调剂。有半年电池和半年高分子实习经历 +9 材料学257求调剂 2026-03-23 10/500 2026-03-24 07:36 by wangy0907
[考研] 一志愿北京化工大学 070300 学硕 336分 求调剂 +7 vv迷 2026-03-22 7/350 2026-03-23 23:44 by Txy@872106
[考研] 0703化学求调剂 +4 奶油草莓. 2026-03-22 5/250 2026-03-23 19:37 by pswait
[考研] 323求调剂 +6 洼小桶 2026-03-18 6/300 2026-03-23 00:29 by king123!
[考研] 287求调剂 +8 晨昏线与星海 2026-03-19 9/450 2026-03-22 17:01 by i_cooler
[考研] 298求调剂一志愿211 +3 上岸6666@ 2026-03-20 3/150 2026-03-22 15:50 by ColorlessPI
[考研] 材料学硕301分求调剂 +7 Liyouyumairs 2026-03-21 7/350 2026-03-21 22:31 by peike
[考研] 初试 317 +7 半拉月丙 2026-03-20 7/350 2026-03-21 22:26 by peike
[考研] 求调剂 +4 要好好无聊 2026-03-21 4/200 2026-03-21 18:57 by 学员8dgXkO
[考研] 297求调剂 +3 喜欢还是不甘心 2026-03-20 3/150 2026-03-21 18:33 by 学员8dgXkO
[考研] 求调剂 +3 13341 2026-03-20 3/150 2026-03-21 18:28 by 学员8dgXkO
[考研] 313求调剂 +4 肆叁贰壹22 2026-03-19 4/200 2026-03-21 17:33 by ColorlessPI
[考研] 265求调剂 +12 梁梁校校 2026-03-19 14/700 2026-03-21 13:38 by lature00
[考研] 一志愿 西北大学 ,070300化学学硕,总分287,双非一本,求调剂。 +3 晨昏线与星海 2026-03-18 3/150 2026-03-21 00:46 by JourneyLucky
[考研] 330求调剂 +4 小材化本科 2026-03-18 4/200 2026-03-20 23:13 by JourneyLucky
[考研] A区线材料学调剂 +5 周周无极 2026-03-20 5/250 2026-03-20 21:33 by laoshidan
[考研] 085600材料与化工调剂 324分 +10 llllkkkhh 2026-03-18 12/600 2026-03-19 14:33 by llllkkkhh
信息提示
请填处理意见