一、关于数据处理 1、归一化:y=(ymax-ymin)*(x-xmin)/(xmax-xmin)+ymin mapminmax函数: (y,ps)=mapinmax(x,ymin,ymax) 2、均值化:y=x/-X(-X为矩阵每列数据均值) y=x/mean([:,a])——a为矩阵列序号 3、标准化: zscore函数: z=zscore(x) 均值化不会损失信息,标准化常用但会损失信息。可用均值化改进PCA) 主成分分析 特征向量求解 1、princomp函数: X=load('shuju.txt') z=zscore(X) [coef,score,eig,t]=princomp(z); t s=0; i=1; while s/sum(eig)<0.85 end NEW=x*coef(:,1:i-1) figure pareto(eig/sum(eig)); figure(2) plot(eig,'r+'); hold on plot(eig,'b-'); 2、eig函数: X=load('shuju.txt') z=zscore(X) M=cov(z) [V,D]=eig(M); d=diag(D); eig1=sort(d,'descend') v=fliplr(V) S=0; i=0; while S/sum(eig1)<0.85 end NEW=z*v(:,1:i) W=100*eig1/sum(eig1) figure(1) pareto(W); %主成分分析 PAC 的Matlab实现 clc clear all A=xlsread('D:\evaluation.xlsx',1,'B2:I16'); % 数据的输入及处理 %数据的标准化处理 a=size(A,1);%获得矩阵A的行大小 b=size(A,2);%获得矩阵A的列大小 for i=1:b SA(:,i)=(A(:,i)-mean(A(:,i)))/std(A(:,i));%std函数是用来求向量的标准差 end % %计算相关系数矩阵的特征值和特征向量 CM=corrcoef(SA);%计算相关系数矩阵 [V,D]=eig(CM);%计算特征值和特征向量 for j=1:b DS(j,1)=D(b+1-j,b+1-j);%对特征值按降序排列 end for i=1:b DS(i,2)=DS(i,1)/sum(DS(:,1));%贡献率 DS(i,3)=sum(DS(1:i,1))/sum(DS(:,1));%累计贡献率 end % % 选择主成分及对应的特征向量 T=0.9;%主成分信息保留率 for k=1:b if DS(k,3)>=T Com_num=k; break; end end %提取主成分对应的特征向量 for j=1:Com_num PV(:,j)=V(:,b+1-j); end % % 计算各评价对象的主成分得分 new_score=SA*PV; for i=1:a total_score(i,1)=sum(new_score(i,:)); total_score(i,2)=i; end result_report=[new_score,total_score];%将各主成分得分与总分放在同一个矩阵中 result_report=sortrows(result_report,-4);%按总分降序排序 % % 输出模型及结果报告 disp('特征值及其贡献率,累加贡献率:') DS disp('信息保留率T对应的主成分数与特征向量:') Com_num PV disp('主成分得分及排序(按第四列的总分进行排序,前三列为个主成分得分,第五列为企业编号)') result_report |
|
来自: 昵称50123674 > 《我的文章》