www.gusucode.com > Relief特征选择算法matlab源码程序 > Relief特征选择算法matlab源码程序/weighted.m

    %==========================================================================
%
% 函数名:weighted
% 函数介绍:计算基因的权重向量。
% 输入参数:data是归一化之后的基因表达谱数据。
%          r1是第一类样本的个数
%          r2是第二类样本的个数
% 输出参数:w是基因的分类权重。是一个列向量。
%          m是表达谱数据中总的基因个数
%
%==========================================================================
function [w , m] = weighted ( r1, r2, data )
[m, n] = size ( data );
w = zeros (1, m);%每一个特征都有一个分类权重。
%首先:使每个样本的类内和类间距离个数相等。
if r1 <= r2
    k = r1;
else 
    k = r2;
end
%第二步:求特征的分类权重。
for i = 1 : n         %样本循环
    x = data (:, i);  %x是样本向量。
    if i <= r1
        fine = 1;   %样本属于第一类。
    else
        fine = 0;   %样本属于第二类。
    end
    [ data_hm ] = distant (r1, r2, data, x, fine, k);%针对样本x找到一个m×2k的阵data_hm
    a = 0;          %特征分类权重的第一个累加项。
    b = 0;          %特征分类权重的第二个累加项。
    for r = 1 : m     %基因循环
        for j = 1 : 2*k %同类、异类样本循环。
            for t =1: 2*k  %临时样本阵的样本循环。 
                if (j <= k & t <= k) || (j > k & t > k )
                    a = a + (data_hm (r, j) - data_hm (r, t))^2;
                else
                    b = b + (data_hm (r, j) - data_hm (r, t))^2;
                end
            end
        end
        a = a / k;
        b = b / k;
        w( r ) = w( r ) - a + b;
    end   %    for r=1:m     %基因循环
end
w = transpose ( w );
% end