O.r*_*rka 6 python machine-learning linear-algebra svd pca
我正在尝试学习如何减少数据集中的维数.我遇到了一些关于Principle Component Analysis和的教程Singular Value Decomposition.我知道它需要最大方差的维度并且顺序地折叠下一个最高方差的维度(过度简化).
我对如何解释输出矩阵很困惑.我查看了文档,但没有多大帮助.我遵循了一些教程,并不太确定所得到的矩阵究竟是什么.我提供了一些代码来了解数据集(sklearn.datasets)中每个变量的分布.
我的初始输入阵列是(n x m)矩阵n samples和m attributes.我可以做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)
Run Code Online (Sandbox Code Playgroud)
如上所述,矩阵 M 可以分解为 3 个矩阵的乘积: U * S * V *。其次是几何意义:任何变换都可以被视为旋转(V *)、缩放(S)和再次旋转(U)的序列。这里有很好的描述和动画。
对我们来说什么重要?矩阵 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]])
Run Code Online (Sandbox Code Playgroud)
几何上 - 每个值都是沿特定轴的比例因子。出于我们的目的(分类和回归),这些值显示特定轴对总体结果的影响。
正如您所看到的,这些值从 2.0 减少到 0.093。最重要的应用之一 -具有给定精度的简单低秩矩阵近似。如果您不需要超精确的分解(机器学习问题确实如此),您可能会放弃最低值并仅保留重要的值。通过这种方式,您可以逐步完善您的解决方案:使用测试集估计质量,丢弃最小值并重复。因此,您可以获得简单而强大的解决方案。
这里要缩小的好的候选值是 8 和 9,然后是 5-7,作为最后一个选项,您可以将模型近似为仅一个值 - 首先。
| 归档时间: |
|
| 查看次数: |
1610 次 |
| 最近记录: |