我能得到的最接近的匹配是运行:
data=rand(100,10); % data set
[W,pc] = pca(cov(data));
那就不要贬低
data2=data
[W2, EvalueMatrix2] = eig(cov(data2));
[W3, EvalueMatrix3] = svd(cov(data2));
在这种情况下,W2
和W3
同意,它们的转置W
?
仍然不清楚为什么W
应该是其他两个的转置?
作为额外的检查,我使用pcacov
:
[W4, EvalueMatrix4] = pcacov(cov(data2));
它再次同意WE
和W3
但W
的转置吗?
结果不同,因为您要减去数据矩阵中每一行的平均值。根据您计算事物的方式,数据矩阵的行对应于数据点,列对应于维度(这也是pca()
函数的工作方式)。通过此设置,您应该从每列(而不是行)中减去平均值。这对应于"居中"数据;沿每个维度的平均值设置为零。执行此操作后,结果应等同于 pca()
,直至符号翻转。
以解决已编辑的问题:居中问题现在看起来不错。在协方差矩阵上运行特征值分解时,请记住按降序特征值对特征向量进行排序。这应该与 pcacov()
的输出相匹配。调用pca()
时,你必须向它传递数据矩阵,而不是协方差矩阵。