所以我阅读了 pca 的文档,它指出这些列是按其方差的降序排列的。然而,每当我采用示例的 PCA 并采用 PCA 矩阵的方差时,我都没有得到特定的顺序。一个简单的例子是:
pc = pca(x)
返回结果
pc =
0.0036 -0.0004
0.0474 -0.0155
0.3149 0.3803
0.3969 -0.1930
0.3794 0.3280
0.5816 -0.2482
0.3188 0.1690
-0.1343 0.7835
0.3719 0.0785
0.0310 -0.0110
意味着第一列应该是 PC1,第二列应该是 PC2,意味着 var(PC1) > var(PC2),但是当我得到方差时,情况显然不是这样。
var(pc)
ans =
0.0518 0.0932
谁能解释一下为什么 PC1 的方差不是最大的?
最佳答案
The docs声明调用
COEFF = pca(x)
将返回一个p逐p矩阵,所以你的结果相当令人惊讶(编辑:这是因为你的x 数据集的行数比列数少(即类似于有 10 个未知数且只有 3 个方程)。不管怎样,当他们谈论方差时,他们并不是指每个分量的系数的方差,而是指投影到每个主分量后x
数据列的方差。文档指出输出 score
包含这些预测,因此要查看您应该执行的降序方差:
[COEFF, score, latent] = pca(x)
var(score)
您将看到 var(score)
等于第三个输出 latent
并且确实按降序排列。
您的误解是您正在尝试计算主成分向量的系数的方差。这些只是单位向量,描述了在其上投影数据的超平面的方向,以便生成的投影数据具有最大方差。这些向量按顺序排列,投影到每个描述的超平面上的原始数据将按方差降序排列,但方差投影数据 (score
) 和主成分向量 (COEFF
) 系数的NOT 或您的代码pc
)。
关于Matlab PCA 主成分阶数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26348803/