0

我刚刚学习在统计工具箱中使用函数 pca,当我尝试下面的简单示例时,它返回了错误但我找不到任何错误?

pca_test_2=[1 1 1 1 1 ; 1.9 2.1 2 2 1.8]

我通过它的转置将它们倍增以获得:

pca_test_2=pca_test_2*pca_test_2';

>> [coeff,score,latent]=pca(pca_test_2);
??? Undefined function or method 'pca' for input arguments of type 'double'.

我看过但找不到任何描述如何解决此类错误的内容?

工具箱肯定是安装好的。当我在协方差矩阵上使用 pcacov 它可以工作(对于不同的数据集)?

有人可以解释我做错了什么吗?

当我将相同的数据与具有相同数据集的 svd 一起使用时,它是否也有效?

[u s v]=svd(pca_test_2)

  u =

  -0.4537   -0.8912
  -0.8912    0.4537


  s =

  24.2493         0
        0    0.0107


  v =

  -0.4537   -0.8912
  -0.8912    0.4537

按照建议,我使用 princomp() 再次运行它,见下文;

但是,当将结果与来自 scd 的结果进行比较时,我仍然有点困惑:为什么“coeff”的“u”不一样?(尽管它们显然相似)。

为什么潜在不等于s的对角线?显然它们是完全不同的(我假设它是一个缩放的东西,但鉴于潜在的第二个特征值为零,很难看出可以使用什么缩放?)

[usv]=svd(pca_test_3)

你=

  -0.4537   -0.8912
  -0.8912    0.4537

小号 =

  24.2493         0
        0    0.0107

v =

  -0.4537   -0.8912
  -0.8912    0.4537

[系数、分数、潜伏]=princomp(pca_test_2)

系数 =

   0.4525    0.8918
   0.8918   -0.4525

分数 =

  -5.3040         0
   5.3040         0

潜伏=

  56.2658
        0
4

1 回答 1

3

您可以使用pcaor princomp,因为princomp只是调用pca. 见这里

SVD 和 PCA 相关,但不相同。应用于数据集的 PCA 本质上是均值中心数据集的 SVD 或协方差矩阵的特征向量。并且如此所述,协方差矩阵的特征值的平方根是奇异值。MATLAB PCA 函数svd在某些情况和eig其他情况下使用。

" Undefined function or method 'pca'..." 错误的来源可能是因为您在路径上的某个位置调用了一个变量pca或另一个变量。pca.m试试看which -all pca是否有多个函数,whos pca看看是否还有其他变量。一个更通用的测试是exist('pca')它会给你一个数字编码找到的对象类型(文件、变量等)

于 2013-10-29T18:26:09.723 回答