【问题标题】:How to get all three SVD matrices with sklearn?如何使用 sklearn 获得所有三个 SVD 矩阵?
【发布时间】:2018-02-02 12:57:40
【问题描述】:

矩阵MSingular value decomposition(M,N)表示因式分解

如何从scikit-learnnumpy包中获取全部三个矩阵?

我想我可以通过PCA model获得Sigma

import numpy as np
from sklearn.decomposition import PCA

model = PCA(N, copy=True, random_state=0)
model.fit(X)

Sigma = model.singular_values_
Sigma = np.diag(singular_values)

其他矩阵呢?

【问题讨论】:

    标签: python numpy scikit-learn pca svd


    【解决方案1】:

    您可以使用numpy.linalg.svd 获取这些矩阵,如下所示:

    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    U, S, V = np.linalg.svd(a, full_matrices=True)
    

    S 是一个1D 数组,表示Sigma 中的对角线条目。 UV 是分解后的对应矩阵。

    顺便说一句,请注意,当您使用PCA 时,数据在应用svd 之前居中(与numpy.linalg.svd 不同,其中svd 直接应用于矩阵本身。参见第409-410 行here)。

    【讨论】:

    • 当数据有噪声时,这是否等同于 PCA? np.linalg.svd 不能在 PCA 估计器仍然运行时抛出异常吗?
    • 我不明白为什么它应该是等效的。 GitHub 中的 PCA 代码也使用 numpy.linalg.svd (这显示在我在答案中提供的链接中)。唯一的区别是在 PCA 代码中他们使用 full_matrices=False 并且在分解之前将数据居中,但它仍然是相同的函数。
    【解决方案2】:

    无法评论 Mirian 的答案,因为我没有足够的声誉,但从 Miriam 的链接来看,sklearn 实际上调用了 scipy 的 linalg.svd,这似乎与 np.linalg.svd @ 不一样987654321@

    所以使用U, S, V = scipy.linalg.svd(a, full_matrices=True)可能会更好

    【讨论】:

      猜你喜欢
      • 2021-10-25
      • 2018-01-18
      • 2014-07-12
      • 2023-04-01
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 2014-02-26
      • 2014-07-14
      相关资源
      最近更新 更多