我正在使用scikit-learn
包中的截断SVD。
在SVD的定义中,原矩阵A被近似为乘积A≈U∑V*,其中U和V具有正交列,是非负对角线。
我需要得到矩阵。
查看源代码here,我发现调用fit_transform
后,V*存储在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_
可以使用scipy.sparse.svds(对于密集矩阵,可以使用svd)。
如果你使用的是非常大的稀疏矩阵(也许你使用的是自然文本),即使是
scipy.sparse.svds
也可能会炸掉你计算机的RAM。在这种情况下,考虑使用SVDLIBC的sparsesvd包,以及gensim
使用的under-the-hood。作为一个注释:
以及
生成U*Sigma。
以矢量形式生成西格玛。
生成VT。 也许我们可以利用
因为U*Sigma*Sigma^-1=U*I=U。
通过您提供的链接查看源代码,
TruncatedSVD
基本上是sklearn.utils.extmath.randograted的包装;您可以自己手动调用它,如下所示:相关问题 更多 >
编程相关推荐