如何解读奇异值分解结果 (Python 3)?
How to interpret Singular Value Decomposition results (Python 3)?
我正在尝试学习如何降低数据集中的维度。我看到了一些关于 Principle Component Analysis
和 Singular Value Decomposition
的教程。我知道它采用最大方差的维度并顺序折叠下一个最大方差的维度(过度简化)。
我对如何解释输出矩阵感到困惑。我查看了文档,但没有太大帮助。我遵循了一些教程,但不太确定结果矩阵到底是什么。我提供了一些代码来感受数据集中每个变量的分布 (sklearn.datasets
) 。
我的初始输入数组是 n samples
和 m attributes
的 (n x m)
矩阵。我可以绘制 PC1 与 PC2 的常见 PCA 图,但我如何知道每台 PC 代表哪些维度?
抱歉,如果这是一个基本问题。很多资源都非常数学,我很好,但更直观的答案会很有用。没有我见过的关于如何根据原始标记数据解释输出的地方。
我愿意使用 sklearn
的 decomposition.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)
正如你上面所说,矩阵 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,作为最后一个选项,您可以将模型近似为只有一个值 - 首先。
我正在尝试学习如何降低数据集中的维度。我看到了一些关于 Principle Component Analysis
和 Singular Value Decomposition
的教程。我知道它采用最大方差的维度并顺序折叠下一个最大方差的维度(过度简化)。
我对如何解释输出矩阵感到困惑。我查看了文档,但没有太大帮助。我遵循了一些教程,但不太确定结果矩阵到底是什么。我提供了一些代码来感受数据集中每个变量的分布 (sklearn.datasets
) 。
我的初始输入数组是 n samples
和 m attributes
的 (n x m)
矩阵。我可以绘制 PC1 与 PC2 的常见 PCA 图,但我如何知道每台 PC 代表哪些维度?
抱歉,如果这是一个基本问题。很多资源都非常数学,我很好,但更直观的答案会很有用。没有我见过的关于如何根据原始标记数据解释输出的地方。
我愿意使用 sklearn
的 decomposition.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)
正如你上面所说,矩阵 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,作为最后一个选项,您可以将模型近似为只有一个值 - 首先。