使用 PCA() 和 PCACOV() 时 Matlab 结果的差异



我能得到的最接近的匹配是运行:

  data=rand(100,10);  % data set
  [W,pc] = pca(cov(data));

那就不要贬低

  data2=data
  [W2, EvalueMatrix2] = eig(cov(data2));
  [W3, EvalueMatrix3] = svd(cov(data2)); 

在这种情况下,W2W3同意,它们的转置W

仍然不清楚为什么W应该是其他两个的转置?

作为额外的检查,我使用pcacov

   [W4, EvalueMatrix4] = pcacov(cov(data2));

它再次同意WEW3W的转置吗?

结果不同,因为您要减去数据矩阵中每一行的平均值。根据您计算事物的方式,数据矩阵的行对应于数据点,列对应于维度(这也是pca()函数的工作方式)。通过此设置,您应该从每列(而不是行)中减去平均值。这对应于"居中"数据;沿每个维度的平均值设置为零。执行此操作后,结果应等同于 pca() ,直至符号翻转。

编辑

以解决已编辑的问题:居中问题现在看起来不错。在协方差矩阵上运行特征值分解时,请记住按降序特征值对特征向量进行排序。这应该与 pcacov() 的输出相匹配。调用pca()时,你必须向它传递数据矩阵,而不是协方差矩阵。

相关内容

  • 没有找到相关文章

最新更新