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...]
另请参阅
参考文献
用随机性寻找结构:用于构造近似矩阵分解的随机算法 Halko等,2009 (arXiv:909) https://arxiv.org/pdf/0909.4061.pdf
备注
SVD 遇到了一个称为“符号不确定性”的问题,这意味着
components_的符号和变换的输出依赖于算法和随机状态。为了解决这个问题,先将该类的实例拟合到数据上,然后保留该实例以进行变换。方法
__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 进行降维。