我正在尝试理解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);