我只是在统计工具箱中学习使用函数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的结果进行比较时,我仍然有点困惑:为什么“你”的“你”不一样? (虽然它们显然相似)。
为什么潜伏不等于s的对角线?显然它们是完全不同的(我假设它是一个缩放的东西但是假设潜在的第二个特征值是零,很难看出可以使用什么缩放?)
[u s v] = svd(pca_test_3)
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(pca_test_2)
coeff =
0.4525 0.8918
0.8918 -0.4525
得分=
-5.3040 0
5.3040 0
latent =
56.2658
0
答案 0 :(得分:3)
您可以使用pca
或princomp
,因为princomp
只需拨打pca
。请参阅here。
SVD和PCA是相关的,但不相同。应用于数据集的PCA实质上是平均中心数据集的SVD或协方差矩阵的特征向量。并且如所指出的here,协方差矩阵的特征值的平方根是奇异值。 MATLAB PCA函数在某些情况下使用svd
,在其他情况下使用eig
。
“Undefined function or method 'pca'...
”错误的来源可能是因为您在路径上的某处有一个名为pca
的变量或另一个pca.m
。尝试which -all pca
查看是否有多个功能,whos pca
查看是否有其他变量。更一般的测试是exist('pca')
,它将为您提供编码所找到对象类型的数字(文件,变量等)