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