| 查看: 1851 | 回复: 1 | ||
[求助]
有用过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 |
» 猜你喜欢
谈谈两天一夜的“延安行”
已经有15人回复
EST投稿状态问题
已经有6人回复
职称评审没过,求安慰
已经有15人回复
垃圾破二本职称评审标准
已经有11人回复
投稿Elsevier的Neoplasia杂志,到最后选publishing options时页面空白,不能完成投稿
已经有16人回复
毕业后当辅导员了,天天各种学生超烦
已经有4人回复
聘U V热熔胶研究人员
已经有10人回复
求助文献
已经有3人回复
投稿返修后收到这样的回复,还有希望吗
已经有8人回复
三无产品还有机会吗
已经有6人回复













回复此楼