- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
由于与其他变量高度相关,我正在使用 PCA 找出数据集中的哪些变量是多余的。我在之前使用 zscore 标准化的数据上使用 princomp matlab 函数:
[coeff, PC, eigenvalues] = princomp(zscore(x))
[coeff, PC, eigenvalues] = princomp(zscore(x));
e = eigenvalues./sum(eigenvalues);
abs(coeff)/e
v1 v2 v3
1 3 4
2 4 -1
4 6 9
3 5 -2
v1 0.5525
v2 0.5525
v3 0.5264
最佳答案
编辑 现在我明白了哪些假设是错误的,我已经完全修改了答案。
在解释什么在 OP 中不起作用之前,让我确保我们将使用相同的术语。在主成分分析中,目标是获得一个能够很好地分离观测值的坐标变换,并且可以很容易地在低维空间中描述数据,即不同的多维观测值。当观察由多次测量组成时,它们是多维的。如果线性独立的观测值少于测量值,我们预计至少有一个特征值为零,因为例如3D 空间中的两个线性无关的观察向量可以用 2D 平面来描述。
如果我们有一个数组
x = [ 1 3 4
2 4 -1
4 6 9
3 5 -2];
princomp(x)
将找到四个观察所跨越的低维空间。由于有两个相互依赖的测量,其中一个特征值将接近于零,因为测量空间只是 2D 而不是 3D,这可能是您想要找到的结果。实际上,如果您检查特征向量 (
coeff
),您会发现前两个分量非常明显共线
coeff = princomp(x)
coeff =
0.10124 0.69982 0.70711
0.10124 0.69982 -0.70711
0.9897 -0.14317 1.1102e-16
[1 1 25]
相当于
[1000 1000 25]
.
princomp(x')
更有意义。 .由于因此只有三个“观察”,但有四个“测量”,因此第四个特征向量将为零。然而,由于有两个线性相关的观测值,我们只剩下两个非零特征值:
eigenvalues =
24.263
3.7368
0
0
corr(x)
ans =
1 1 0.35675
1 1 0.35675
0.35675 0.35675 1
v1
与
v2
完全相关.
but the eigenvalues tell us which vectors in the new space are most important (cover the most of variation) and also coefficients tell us how much of each variable is in each component. so I assume we can use this data to find out which of the original variables hold the most of variance and thus are most important (and get rid of those that represent small amount)
x = [1 2 3;1 4 22;1 25 -25;1 11 100];
,因此第一个变量对方差没有贡献),则此方法有效。然而,在共线测量中,两个向量都拥有相同的信息,并且对方差的贡献相同。因此,特征向量(系数)可能彼此相似。
coeff
返回主体的基向量eigenvalues/sum(eigenvalues)
unique
在归一化(即 norm
等于 1)向量上。 关于Matlab:如何在matlab中使用PCA找到可以丢弃数据集中的哪些变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7588637/
我是一名优秀的程序员,十分优秀!