sklearn.decomposition.TruncatedSVD

class sklearn.decomposition.TruncatedSVD(n_components=2, *, algorithm='randomized', n_iter=5, random_state=None, tol=0.0)

[源码]

使用截断SVD(即LSA)降维。

该变压器采用截断奇异值分解(SVD)进行线性降维。与主成分分析相反,该估计器在计算奇异值分解前不集中数据。这意味着它可以有效地处理稀疏矩阵。

特别地,截断的SVD适用于由sklearn.feature_extraction.text中的矢量器返回的term count/tf-idf矩阵。在这种情况下,它被称为潜在语义分析(LSA)。

该估计器支持两种算法:一种是快速随机SVD求解器,另一种是在X * X.T or X.T * X上使用ARPACK作为特征求解器的“天真”算法.X * X.T or X.T * X哪个效率更高。

用户指南中阅读更多内容

参数 说明
n_components int, default = 2
输出数据的期望维数。必须严格小于特性的数量。默认值对可视化很有用。对于LSA,建议值为100。
algorithm string, default = “randomized”
SVD求解器使用。或者用“arpack”表示SciPy中的arpack包装(SciPy .sparse.linalg.svds),或者用“random”表示由Halko(2009)提出的随机算法。
n_iter int, optional (default 5)
随机SVD求解器的迭代次数。ARPACK没有使用。默认值比randomized_svd中的默认值大,用于处理可能有较大的缓慢衰减频谱的稀疏矩阵。
random_state int, RandomState instance, default=None
用于随机svd。在多个函数调用中传递可重复的结果。详见术语表
tol float, optional
对ARPACK的容忍度。0表示机器精度。随机SVD求解器忽略。
属性 说明
components_ array, shape (n_components, n_features)
explained_variance_ array, shape (n_components,)
训练样本的方差由投影转换到每个分量。
explained_variance_ratio_ array, shape (n_components,)
所选择的每个组成部分所解释的方差百分比。
singular_values_ array, shape (n_components,)
对应于每个选定分量的奇异值。奇异值等于低维空间中n_component变量的2-范数。

另见:

PCA

注意:

SVD有一个叫做“符号不确定性”的问题,这意味着 components_ 的符号和transform的输出依赖于算法和随机状态。要解决这个问题,只需将该类的实例与数据匹配一次,然后保留该实例来执行转换。

参考文献:

Finding structure with randomness: Stochastic algorithms for constructing approximate matrix decompositions Halko, et al., 2009 (arXiv:909) https://arxiv.org/pdf/0909.4061.pdf

示例:

>>> from sklearn.decomposition import TruncatedSVD
>>> from scipy.sparse import random as sparse_random
>>> from sklearn.random_projection import sparse_random_matrix
>>> X = sparse_random(100100, density=0.01, format='csr',
...                   random_state=42)
>>> svd = TruncatedSVD(n_components=5, n_iter=7, random_state=42)
>>> svd.fit(X)
TruncatedSVD(n_components=5, n_iter=7, random_state=42)
>>> print(svd.explained_variance_ratio_)
[0.0646... 0.0633... 0.0639... 0.0535... 0.0406...]
>>> print(svd.explained_variance_ratio_.sum())
0.286...
>>> print(svd.singular_values_)
[1.553... 1.512...  1.510... 1.370... 1.199...]

方法:

方法 说明
fit(X[, y]) 在训练数据X上拟合LSI模型。
fit_transform(X[, y]) 将LSI模型拟合到X上,对X进行降维。
get_params([deep]) 获取这个估计器的参数。
inverse_transform(X) 将X变换回原来的空间。
set_params(**params) 设置这个估计器的参数。
transform(X) 对X进行降维。
__init__(n_components=2, *, algorithm='randomized', n_iter=5, random_state=None, tol=0.0)

[源码]

初始化self. See 请参阅help(type(self))以获得准确的说明。

fit(X, y=None)[source]

[源码]

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

参数 说明
X array-like, shape (n_samples, n_features)
训练向量,其中样本数量中的n_samples和n_features为feature的数量。
y Ignored
返回值 说明书
self object
返回transformer对象。
fit_transform(X, y=None)

[源码]

将LSI模型拟合到X上,对X进行降维。

参数 说明
X {array-like, sparse matrix}, shape (n_samples, n_features)
训练数据
y Ignored
返回值 说明书
X_new array, shape (n_samples, n_components)
简化后的x。这将始终是一个密集数组。
get_params(deep=True)

[源码]

获取这个估计器的参数。

参数 说明
deep bool, default=True
如果为True,则将返回此估计器的参数和所包含的作为估计器的子对象。
返回值 说明
params mapping of string to any
参数名称映射到它们的值。
inverse_transform(X)

[源码]

将X变换回原来的空间。

返回转换为X的数组X_original。

参数 说明
X array-like, shape (n_samples, n_components)
新的数据
返回值 说明书
X_original array, shape (n_samples, n_features)
注意,这始终是一个密集数组。
set_params(**params)

设置这个估计器的参数。

该方法适用于简单估计量和嵌套对象。后者具有形式为<component>_<parameter>的参数,这样就让更新嵌套对象的每个组件成为了可能。

参数 说明
**params dict
估计器参数。
返回值 说明书
self object
估计器实例
transform(X)

[源码]

参数 说明
X {array-like, sparse matrix}, shape (n_samples, n_features)
新的数据
返回值 说明书
X_new array, shape (n_samples, n_components)
简化后的x。这将始终是一个密集数组。