【发布时间】:2014-02-10 03:02:52
【问题描述】:
我正在尝试理解 Matlab 中的主成分分析,
似乎至少有 3 个不同的功能可以做到这一点。
我对下面的代码有一些疑问:
我是否仅使用一个特征向量(对应于最大特征值的那个)正确地创建了近似
x值?我想是的??为什么
PC和V都意味着 (x'x) 的载荷呈现不同?列顺序颠倒了,因为eig没有把最大的特征值排在最前面,但为什么它们是彼此的负数?为什么
eig的值没有与第一列最大特征值对应的特征向量排序?当使用
svd和eig时,使用下面的代码返回输入矩阵x,但princomp 的结果似乎完全不同?那么我必须怎么做才能使 princomp 匹配其他两个函数?
代码:
x=[1 2;3 4;5 6;7 8 ]
econFlag=0;
[U,sigma,V] = svd(x,econFlag);%[U,sigma,coeff] = svd(z,econFlag);
U1=U(:,1);
V1=V(:,1);
sigma_partial=sigma(1,1);
score1=U*sigma;
test1=score1*V';
score_partial=U1*sigma_partial;
test1_partial=score_partial*V1';
[PC, D] = eig(x'*x)
score2=x*PC;
test2=score2*PC';
PC1=PC(:,2);
score2_partial=x*PC1;
test2_partial=score2_partial*PC1';
[o1 o2 o3]=princomp(x);
【问题讨论】:
-
您的代码缺少(尝试)从
princomp的输出重构x的部分。 -
看这个关于特征向量顺序的问题:stackoverflow.com/q/13704384/97160
标签: matlab pca svd eigenvector