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

    %==========================================================================
%
% 文件名称:Relief.m
% 摘要:求出基因的分类权重。选出权重较大的一组基因作为特征基因。
% 作者:李晓明
% 完成日期:2007年4月25日
%
% 第一次修改
% 修改内容:改善文件的结构、完善注释增加文件的可读性。
% 修改日期:2007年5月15日。
%
% 第二次修改
% 修改内容:修改了choose函数。输出的是分类权重较大基因的原始表达量,而不再是归一化表达量。
%          修改了redundance函数。输出的是特征基因的原始表达量,而不再是归一化表达量。
%          修改目的是使程序更加规范。便于其他程序调用本程序的输出数据。
% 修改时间:2007年6月1日。

%==========================================================================
%
% 主函数介绍:函数名:Relief
%            函数实现了lelief算法。(计算样本的每一个特征的分类权重,选出具有最大权重的一组特征。样本的特征就是基因)。
%            对权重较大的一组基因进行两两冗余分析。将相关性弱的和强相关中权重大的基因保留,即为特征基因。
%            已知基因表达谱数据、不同类样本的个数,自行设定分类特征的权重阈值。
%            对原始数据标准化的方法:(x-基因均值)/基因方差。
%            样本的类内类间距离采用欧氏距离。
% 输入参数:data是基因表达谱数据,行是基因。列是样本。
%          data的第一行是样本的类型标志。0表示正常样本;1表示肿瘤样本。
           %===============================================================
           % 07年的胃癌数据。
           %data = importdata('gastric_cancer1519.xls');%1519*(20+20)
           %===============================================================
% 输入参数格式要求:行是基因。列是样本。特别注意:数据的第一行是样本类别标记。0表示正常样本;1表示肿瘤样本。
%
% 输出参数:
%          important_data是按照设定阈值选出的具有最大分类权重的一组基因的原始表达量。
%          important_order是分类权重大于阈值的基因的顺序号。
%          feature_gene是特征基因的原始表达量。
%          feature_order是特征基因的顺序号。
% 函数中的阈值:共涉及两个阈值。都由用户自行输入。
%             gastric_cancer1519.xls的权重阈值    2500;           
%             进行两两冗余分析需要设定相关性阈值。gastric_cancer1519.xls的相关性阈值=0.9
%==========================================================================
%主函数:
function [important_data, important_order,  feature_gene, feature_order] = Relief ( data )

%==========================================================================

% 第一步:对原始基因表达谱数据归一化。方法:(样本-样本均值)/样本方差。同时计算每类样本的个数。
[stand_data, sort_1, sort_2 ] = standardization( data );

%==========================================================================

% 第二步:求基因的权重向量。
[weight, g_numbertotal] = weighted( sort_1, sort_2, stand_data );

%==========================================================================

% 第三步:画基因分类权重散点图。
subplot(2, 1, 1);
[ max_weight ] = dot_weight ( weight, g_numbertotal);

%==========================================================================

% 第四步:画出基因分类权重的柱图。找到柱图的突跳点。
subplot(2, 1, 2);
[ threshold , gene_distributing] = pillar ( weight, sort_1, sort_2 );

%==========================================================================

% 第五步:根据设定的权重阈值,选出的具有最大分类权重的一组特征。
[ important_data, important_order, important_w, stand_important  ] = choose ( weight, g_numbertotal, data, stand_data );

%==========================================================================

% 第六步:对选出的权重较大基因进行两两冗余分析,目的是去掉冗余基因。
[ feature_gene, feature_order ] = redundance ( data,  important_order, important_w, stand_important, g_numbertotal  );

%==========================================================================
% end