Relief算法 MATLAB

19e698c6e1ad4c1fa9dcdbcaecc5eeb4.pngb1a52819914d410da0db26ca6cbcb401.png

(一段加载不出来所以分两段)

%D为输入的训练集合,输入集合去掉身份信息;k为最近邻样本个数
m=5; %抽样次数
k=2; %选取邻近样本个数,k小于分类结果最少的样本数
N=20; %运行次数

D = randi([2,8],30,7)
f = randi([0,1],30,1)
D = [D,f]

Rows=size(D,1); %样本个数
Cols=size(D,2); %特征个数
%将数据分成两类,加快计算速度
D1=zeros(0,Cols);%第一类,0行 []
D2=zeros(0,Cols);%第二类
for i=1:Rows
    if D(i,Cols)==0 %0是其中一个类别的代表
        D1(size(D1,1)+1,:)=D(i,:);%matlab变量弱类型可以动态修改
    elseif D(i,Cols)==1 %0是另一个类别的代表
        D2(size(D2,1)+1,:)=D(i,:);
    end
end %分好类填入D1和D2中

W=zeros(1,Cols-1);%初始化特征权重,置为0
for  i=1:m %选择循环操作
    %从D中随机选择一个样本R
    %[R,Dh,Dm]=GetRandSamples(D,D1,D2,k);
    
    
    %先产生一个随机数,确定选定的样本R
r = ceil(1 + (size(D,1)-1)*rand) ;
R=D(r,:); %将第r行选中,赋值给R

d1 = zeros(1,0) ;%先置0,d1是与R的距离,是不是同类在下面判断
d2 = zeros(1,0) ;%先置0,d2是与R的距离

%D1,D2是先传入的参数,在ReliefF函数中已经分类好了
for i=1:size(D1,1) %计算R与D1的距离
    d1(1,i)=cov(R-D1(i,:)); %用协方差来量化两个向量之间的距离
end
for j=1:size(D2,1) %计算R与D2的距离
    d2(1,j)=cov(R-D2(j,:));
end

[v1,L1] = sort(d1) ;%d1升序排序,v1为排序结果,L1为规则
[v2,L2] = sort(d2) ;%d2升序排序

if R(1,size(R,2))==2  %如果R样本=2,是良性
    H = D1(L1(1,2:k+1),:) ; %L1中是与R最近的距离的编号,赋值给H。
    M = D2(L2(1,1:k),:) ; %v2(1,1:k) ;
else
    H = D1(L1(1,1:k),:);
    M = D2(L2(1,2:k+1),:) ;
end

%循环计算每2个样本特征之间的特征距离:(特征1-特征2)/(max-min)
for i = 1:size(H,1)
    for j =1 :size(H,2)
        Dh(i,j) = abs(H(i,j)-R(1,j))/9 ; % 本文数据范围都是1-10,所以max-min=9为固定
        Dm(i,j) = abs(M(i,j)-R(1,j))/9 ;
    end
end
    
    
    %更新特征权重
    for j=1:length(W)
        W(1,j)=W(1,j)-sum(Dh(:,j))/(k*m)+sum(Dm(:,j))/(k*m);%按照公式这里的sum就是上面公式中从1到k的求和,因为Dh和Dm是k行
                                            %sum不仅可以对矩阵求和,还能对矩阵元素满足条件的元素求和,比如sum(D(:,size(D,2)==2)
                                            %这样只对D的最后一列是2的累计加1
    end
end

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江希垣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值