end end
newBB=newBB';
newindex22=newindex22';
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 主成分分析法
% index_huanyuan=zeros(1909,1); % for i=1:length(newBB)
% temp1=newindex22(i);
% index_huanyuan11(i)=temp1; % for j=1:62
% data_tiqu_hou(i,j)=data_guiyihua(temp1,j); % end % end
for i=1:length(newBB)
temp_1=newindex22(i);
index_huanyuan_1(i)=temp_1;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%对应抽取出的300个基因的标号 for j=1:62
data_tiqu1_hou(i,j)=data(temp_1,j); end end
%主成分分析——数据归一化(飞哥提取的300个基因) sum_total_1=0; std_total_1=0;
for i=1:length(newBB) for j=1:62
sum_total_1=sum_total_1+data_tiqu1(i,j); end end
ave_1=sum_total_1/(62*length(newBB)); for i=1:length(newBB) for j=1:62
std_total_1=std_total_1+(data_tiqu1(i,j)-ave_1)^2; end end
std_1=sqrt(std_total_1/(62*1909-1)); for i=1:length(newBB) for j=1:62
tiqu_guiyihua(i,j)=(data_tiqu1(i,j)-ave_1)/std_1;
26
end end
%主成分分析——求相关系数矩阵 tiqu_zhuanzhi=tiqu_guiyihua'; % %C=cov(tiqu_zhuanzhi); % R=corrcoef(tiqu_zhuanzhi); % fprintf('相关系数矩阵:\\n');
std=CORRCOEF(tiqu_zhuanzhi); %计算相关系数矩阵 % fprintf('特征向量(vec)及特征值(val):\\n')
[vec,val]=eig(std); %求特征值(val)及特征向量(vec) newval=abs(diag(val)) ;
%newval_biaohao_zhi=[index_huanyuan_1,newval];%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%将标号与特征值组成300*2的向量
[y,index]=sort(newval) ; %对特征根进行排序,y为排序结果,index为索引 % fprintf('特征根排序:\\n'); for z=1:length(y)
newy(z)=y(length(y)+1-z); end
% fprintf('%g\\n',newy); rate=y/sum(y);
% fprintf('\\n贡献率:\\n'); newrate=newy/sum(newy); sumrate=0; newindex=[];
for k=length(y):-1:1
sumrate=sumrate+rate(k);
newindex(length(y)+1-k)=index(k); if sumrate>0.93 break; end
end %记下累积贡献率大85%的特征值的序号放入newindex中 fprintf('主成分数:%g\\n\\n',length(newindex));
附录二:加权得分程序
clc;
clear all;
% P是样本数据, T是表示样本类别的下表矩阵
27
fid1=fopen('pre_pro.txt','r');
data1=fscanf(fid1,'%g',[62,1909]); data=data1';
biaohao=[1696 643 1560 457 1855 1094 1798 67 691];%冗余+主成分0.5最优组合
%biaohao=[540];%加权APC
%biaohao=[114 259 533 635 859 994 1354 1360 1700 1896];%加权RAS
for i=1:length(biaohao) for j=1:1909
if (j==biaohao(i)) P1=data(j,1:14); P2=data(j,23:48); P(i,1:40)=[P1 P2]; break; end end end
%T1=[1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2];
T1=[1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ]; % 将下标矩阵变为单值矢量组作为网络的目标输出 T=ind2vec(T1);
% 设计概率神经网络 sp=0.1; %扩展常数 net=newpnn(P,T,sp);
% 对网络进行仿真,并绘出分类结果 Y=sim(net,P); Y1=vec2ind(Y);
% 对一组新的数据进行分类 for i=1:length(biaohao) for j=1:1909
if (j==biaohao(i)) P3=data(j,15:22); P4=data(j,49:62); PP(i,1:22)=[P3 P4]; break; end
28
end end
Y=sim(net,PP); Y1=vec2ind(Y); correct=0; for i=1:22
if (Y1(i)==1)&(i<=8) correct=correct+1; elseif (Y1(i)==2)&(i>8) correct=correct+1; end end
%%%%%%%%%%%%%%%%%%%%%% % a1=0.35565; % a2=0.414226; % a3=0.230126; for i=1:22
if (Y1(i)==1) X1(i)=0; elseif (Y1(i)==2) X1(i)=1; end end
biaohao=[540];%加权APC
%biaohao=[114 259 533 635 859 994 1354 1360 1700 1896];%加权RAS
for i=1:length(biaohao) for j=1:1909
if (j==biaohao(i)) P1=data(j,1:14); P2=data(j,23:48); P(i,1:40)=[P1 P2]; break; end end end
%T1=[1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2];
T1=[1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ]; % 将下标矩阵变为单值矢量组作为网络的目标输出 T=ind2vec(T1);
29
% 设计概率神经网络 sp=0.1; %扩展常数 net=newpnn(P,T,sp);
% 对网络进行仿真,并绘出分类结果 Y=sim(net,P); Y1=vec2ind(Y);
% 对一组新的数据进行分类 for i=1:length(biaohao) for j=1:1909
if (j==biaohao(i)) P3=data(j,15:22); P4=data(j,49:62); PP(i,1:22)=[P3 P4]; break; end end end
Y=sim(net,PP); Y2=vec2ind(Y); correct=0; for i=1:22
if (Y2(i)==1)&(i<=8) correct=correct+1; elseif (Y2(i)==2)&(i>8) correct=correct+1; end end
%%%%%%%%%%%%%%%%%%%%%% % a1=0.35565; % a2=0.414226; % a3=0.230126; for i=1:22
if (Y2(i)==1) X2(i)=0; elseif (Y2(i)==2) X2(i)=1; end end
%biaohao=[540];%加权APC
30