方法一:
1:用zscore函数对原始数据S进行标准化。
2:用cov函数求出标准化后的数据的协方差。
3:求出此协方差的特征向量与特征根(eig函数)。
4:将产生的特征向量依据特征根大小从大到小进行排列(即将特征向量按列倒序)。
5:依据需求取出倒序后的向量的前几列(一般根据特征根来算贡献率,使得累计贡献率大于85%),组成新的矩阵T
6:做S*T得到分析后的新的数据。
7:依据特征根算贡献率,并绘图。
代码如下:
X=load('shuju.txt')
z=zscore(X) %数据标准化
M=cov(z) %协方差
[V,D]=eig(M); %求出协方差矩阵的特征向量、特征根
d=diag(D); %取出特征根矩阵列向量(提取出每一主成分的贡献率)
eig1=sort(d,'descend') %将贡献率按从大到小元素排列
v=fliplr(V) %依照D重新排列特征向量
S=0;
i=0;
while S/sum(eig1)<0.85
i=i 1;
S=S eig1(i);
end %求出累积贡献率大于85%的主成分
NEW=z*v(:,1:i) %输出产生的新坐标下的数据
W=100*eig1/sum(eig