一、方法
主成分分析也成主分量分析,利用降维的思想,将多个指标特征转化为少数的几个综合指标特征。是一种线性变化来简化数据集的技术。在减少维数的同时还尽可能多的保留数据集的特征。
作用在于:降低维数,弄清变量间关系,在低维可以图形化,构造回归模型以及筛选回归变量等
二、步骤
1.对原始数据标准化 xi=(Xi-平均值Xi)/Si
2.计算标准化后的相关系数矩阵R
3.计算R的特征值和特征向量
4.计算贡献率和累计贡献率以及主成分载荷 lij=sqrt(lambai)eij,其中ei是对应特征值lambdai的特征向量,eij为ei的第j个分量
三、实验
数据 data.txt
148 41 72 78139 34 71 76160 49 77 86149 36 67 79159 45 80 86142 31 66 76153 43 76 83150 43 77 79151 42 77 80139 31 68 74140 29 64 74161 47 78 84158 49 78 83140 33 67 77137 31 66 73152 35 73 79149 47 82 79145 35 70 77160 47 74 87156 44 78 85151 42 73 82147 38 73 78157 39 68 80147 30 65 75157 48 80 88151 36 74 80144 36 68 76141 30 67 76139 32 68 73148 38 70 78
print.m
%pca 主成分分析结果表function print(X)Z=zscore(X);%进行标准化 (x-平均x/s)R=corrcoef(Z);%对标准化后的矩阵求相关系数矩阵R,这里使用cov也是可以的,和结果相差无几,cov的时候可以不对X进行标准化[V,D]=eig(R); %对相关系数矩阵R求特征值和特征向量分别为D和VCols=size(X,2);%获取特征的个数characters=zeros(1,Cols);%将特征值保存在characters中for i=1:Colscharacters(i)=D(i,i);end[sortedCharacters,label]=sort(characters,'descend'); %逆序排序,并记下结果和索引fprintf(' Eigenvalue of the Correlation Matrix\n');fprintf('EigenvalueDifference ProportionCumulative \n');total=0;for i=1:Colsfprintf([' Z' num2str(i)]);fprintf('%.4f',sortedCharacters(i));if i==Colsfprintf(' . ');elsefprintf(' %.4f',sortedCharacters(i)-sortedCharacters(i+1));endfprintf(' %.4f',sortedCharacters(i)/sum(sortedCharacters));total=total+sortedCharacters(i);fprintf(' %.4f\n',total/sum(sortedCharacters));endfprintf(' Eigenvectors\n');fprintf(' Z1 Z2 Z3 Z4 \n');for i=1:Colsfprintf([' X' num2str(i)]); %[]进行字符串连接for j=1:Colsfprintf(' %8.4f ',V(i,label(j))); %格式化输出endfprintf('\n');end
结果
可以看出前两个特征累计贡献率已达到96.36%,因此只需要两个特征就可以很好地概括这组数据. 一般取累计贡献率达85%-95%的特征值lambda1,lambda2,..lambdam对应的前m个主成分. 当沿着Z1的向量方向投影是最好的.