【问题标题】:How to interpret Singular Value Decomposition results (Python 3)?如何解释奇异值分解结果(Python 3)?
【发布时间】:2016-10-11 21:21:20
【问题描述】:

我正在尝试学习如何减少数据集中的维度。我在Principle Component AnalysisSingular Value Decomposition 上看到了一些教程。我知道它采用最大方差的维度并依次折叠下一个最高方差的维度(过于简化)。

我对如何解释输出矩阵感到困惑。我查看了文档,但没有太大帮助。我遵循了一些教程,并不太确定生成的矩阵到底是什么。我提供了一些代码来了解数据集中每个变量的分布 (sklearn.datasets)。

我的初始输入数组是n samplesm attributes(n x m) 矩阵。我可以绘制 PC1 与 PC2 的普通 PCA 图,但我如何知道每台 PC 代表哪些维度?

抱歉,这是一个基本问题。很多资源都非常数学,我很好,但更直观的答案会很有用。没有我见过的关于如何根据原始标记数据解释输出的地方。

我愿意使用sklearndecomposition.PCA

#Singular Value Decomposition
U, s, V = np.linalg.svd(X, full_matrices=True)
print(U.shape, s.shape, V.shape, sep="\n")
(442, 442)
(10,)
(10, 10)

【问题讨论】:

标签: python machine-learning linear-algebra pca svd


【解决方案1】:

如上所述,矩阵 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,作为最后一个选项,您可以只将模型近似为一个值 - 首先。

【讨论】:

  • 协变矩阵的特征向量在哪里?
  • 它们是 U 还是 V 的列?感谢您的回答顺便说一句有没有办法知道原始数据集的哪些维度由特征向量表示?
  • fU 和 V 的列分别是 M 的左奇异向量和右奇异向量。更多细节在这里en.wikipedia.org/wiki/…
  • 要找到协方差以及原始数据集的哪些维度最有价值,您可以使用这个东西:scikit-learn.org/stable/modules/generated/… 有一个属性:explained_variance_ratio_ : array, [n_components] 每个解释的方差百分比选定的组件。如果 n_components 未设置,则存储所有组件,解释方差之和等于 1.0
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 2016-09-15
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
  • 2013-07-14
  • 1970-01-01
相关资源
最近更新 更多