我试图学习如何减少数据集中的维度。我在Principle Component Analysis
和Singular Value Decomposition
上看到了一些教程。我知道它需要最大方差的维度,并且顺序地折叠下一个最高方差的维度(过度简化)。
我对如何解释输出矩阵感到困惑。我查看了文档,但它没有多大帮助。我遵循了一些教程,并不太确定所得到的矩阵究竟是什么。我提供了一些代码来了解数据集中每个变量的分布(sklearn.datasets
)。
我的初始输入数组是(n x m)
和n samples
的{{1}}矩阵。我可以做PC1与PC2的常见PCA图,但我怎么知道每台PC代表哪个尺寸?
很抱歉,如果这是一个基本问题。很多资源都非常重要,我很好,但更直观的答案会很有用。不,我在哪里谈到过如何根据原始标记数据解释输出。
我可以使用m attributes
' s sklearn
decomposition.PCA
答案 0 :(得分:2)
如上所述,矩阵M可以分解为3个矩阵的乘积:U * S * V * 。 接下来是几何感:任何变换都可以被视为旋转序列(V * ),缩放(S)和旋转(U)。这里很好description and animation。
对我们来说重要的是什么? 矩阵S是对角线 - 它在主对角线上的所有值都是0.
像:
np.diag(s)
array([[ 2.00604441, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0. , 1.22160478, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 1.09816315, 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0.97748473, 0. , 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0.81374786, 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. , 0.77634993, 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. , 0. , 0.73250287, 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.65854628, 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.27985695, 0. ],
[ 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.09252313]])
几何 - 每个值都是沿特定轴的缩放系数。 出于我们的目的(分类和回归),这些值显示特定轴对总体结果的影响。
您可能会看到这些值从2.0降至0.093。 最重要的应用程序之一 - 具有给定精度的简单Low-rank matrix approximation。如果您不需要超精确分解(ML问题也是如此),您可能会抛弃最低值并保持重要性。通过这种方式,您可以逐步完善您的解决方案:使用测试集估计质量,抛弃最小值并重复。因此,您可以获得简单而强大的解决方案。
这里要收缩的好候选人是8和9,然后是5-7,作为最后一个选项,你可以将模型逼近到只有一个值 - 首先。