mars.learn.decomposition.TruncatedSVD#

class mars.learn.decomposition.TruncatedSVD(n_components=2, algorithm='randomized', n_iter=5, random_state=None, tol=0.0)[来源]#

使用截断奇异值分解(又称LSA)进行降维。

这个变换器通过截断奇异值分解(SVD)进行线性降维。与PCA相反,这个估计器在计算奇异值分解之前不会对数据进行中心化。这意味着它可以有效地处理scipy.sparse矩阵。

特别地,截断SVD在由sklearn.feature_extraction.text中的向量化器返回的词频/tf-idf矩阵上工作。在这个背景下,它被称为潜在语义分析(LSA)。

此估计器支持两种算法:一种快速的随机化SVD求解器,以及一种使用ARPACK作为特征值求解器的“简单”算法,基于(X * X.T)或(X.T * X),具体取决于哪个更高效。

用户指南中阅读更多内容。

Parameters
  • n_components (int, 默认值 = 2) – 输出数据的期望维度。 必须严格小于特征的数量。 默认值对于可视化很有用。对于LSA,推荐值为 100。

  • 算法 (字符串, 默认 = "随机化") – 使用的SVD求解器。可以选择“arpack”,表示SciPy中的ARPACK包装器(scipy.sparse.linalg.svds),或者选择“随机化”,表示Halko(2009)提出的随机化算法。

  • n_iter (int, 可选 (默认 5)) – 随机SVD求解器的迭代次数。ARPACK不使用此参数。默认值大于randomized_svd中的默认值,以处理可能具有缓慢衰减谱的稀疏矩阵。

  • random_state (int, RandomState 实例None, 可选, 默认值 = None) – 如果是整数,random_state 是随机数生成器使用的种子;如果是 RandomState 实例,random_state 是随机数生成器;如果是 None,随机数生成器是由 np.random 使用的 RandomState 实例。

  • tol (float, 可选) – ARPACK的容忍度。0表示机器精度。被随机SVD求解器忽略。

components_#
Type

数组,形状 (n_components, n_features)

explained_variance_#

每个分量的训练样本通过投影转换后的方差。

Type

数组,形状 (n_components,)

explained_variance_ratio_#

所选组件解释的方差百分比。

Type

数组,形状 (n_components,)

singular_values_#

与每个选定组件对应的奇异值。奇异值等于低维空间中 n_components 变量的 2-范数。

Type

数组,形状 (n_components,)

示例

>>> from mars.learn.decomposition import TruncatedSVD
>>> import mars.tensor as mt
>>> from sklearn.random_projection import sparse_random_matrix
>>> X = mt.tensor(sparse_random_matrix(100, 100, density=0.01, random_state=42))
>>> svd = TruncatedSVD(n_components=5, n_iter=7, random_state=42)
>>> svd.fit(X)  
TruncatedSVD(algorithm='randomized', n_components=5, n_iter=7,
        random_state=42, tol=0.0)
>>> print(svd.explained_variance_ratio_)  
[0.0606... 0.0584... 0.0497... 0.0434... 0.0372...]
>>> print(svd.explained_variance_ratio_.sum())  
0.249...
>>> print(svd.singular_values_)  
[2.5841... 2.5245... 2.3201... 2.1753... 2.0443...]

另请参阅

PCA

参考文献

用随机性寻找结构:用于构造近似矩阵分解的随机算法 Halko等,2009 (arXiv:909) https://arxiv.org/pdf/0909.4061.pdf

备注

SVD 遇到了一个称为“符号不确定性”的问题,这意味着 components_ 的符号和变换的输出依赖于算法和随机状态。为了解决这个问题,先将该类的实例拟合到数据上,然后保留该实例以进行变换。

__init__(n_components=2, algorithm='randomized', n_iter=5, random_state=None, tol=0.0)[来源]#

方法

__init__([n_components, algorithm, n_iter, ...])

fit(X[, y, session])

在训练数据 X 上拟合 LSI 模型。

fit_transform(X[, y, session])

拟合LSI模型到X并对X进行降维。

get_params([deep])

获取该估计器的参数。

inverse_transform(X[, session])

将X转换回其原始空间。

set_params(**params)

设置此估计器的参数。

transform(X[, session])

对 X 进行降维。