我正在使用 scikit-learn
包中的截断 SVD。
在 SVD 的定义中,原始矩阵 A 近似为 A ≈ UΣV* 的乘积,其中 U 和 V 具有正交列,并且 Σ 是非负对角线。
我需要获取 U 、 Σ 和 V* 矩阵。
在 这里查看 源代码,我发现 V* 在调用 fit_transform
后存储在 self.components_
字段中。
是否有可能获得 U 和 Σ 矩阵?
我的代码:
import sklearn.decomposition as skd
import numpy as np
matrix = np.random.random((20,20))
trsvd = skd.TruncatedSVD(n_components=15)
transformed = trsvd.fit_transform(matrix)
VT = trsvd.components_
原文由 Vektor88 发布,翻译遵循 CC BY-SA 4.0 许可协议
通过您提供的链接查看源代码,
TruncatedSVD
基本上是 sklearn.utils.extmath.randomized_svd 的包装器;您可以像这样自己手动调用它: