【发布时间】:2013-11-09 00:45:53
【问题描述】:
我只是在学习使用统计工具箱中的函数 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”不一样? (尽管它们显然相似)。
为什么latent不等于s的对角线?显然它们是完全不同的(我假设它是一个缩放的东西,但鉴于潜在的第二个特征值为零,很难看出可以使用什么缩放?)
[u s v]=svd(pca_test_3)
你=
-0.4537 -0.8912
-0.8912 0.4537
s =
24.2493 0
0 0.0107
v =
-0.4537 -0.8912
-0.8912 0.4537
[coeff,score,latent]=princomp(pca_test_2)
系数 =
0.4525 0.8918
0.8918 -0.4525
分数 =
-5.3040 0
5.3040 0
潜在的 =
56.2658
0
【问题讨论】:
-
使用
princomp而不是pca -
感谢它运行并产生接近但不完全正确的结果(我猜 princomp 的扩展方式与 svd 不同,但必须检查)。我虽然 princomp 是一个遗留功能,而 pca 是更新更好的版本。为什么 pca 在这里不起作用?更一般地说,我如何知道在任何给定情况下应该选择哪种方法:svd、pca、princomp 以及为什么?
标签: matlab