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-范数。 |
另见:
注意:
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(100, 100, 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。这将始终是一个密集数组。 |