dask_ml.decomposition.TruncatedSVD

dask_ml.decomposition.TruncatedSVD

class dask_ml.decomposition.TruncatedSVD(n_components=2, algorithm='tsqr', n_iter=5, random_state=None, tol=0.0, compute=True)

方法

fit(X[, y])

在训练数据 X 上拟合截断 SVD

fit_transform(X[, y])

将模型拟合到 X 并在 X 上执行降维。

get_metadata_routing()

获取此对象的元数据路由。

get_params([deep])

获取此估计器的参数。

inverse_transform(X)

将 X 转换回其原始空间。

set_output(*[, transform])

设置输出容器。

set_params(**params)

设置此估计器的参数。

transform(X[, y])

在 X 上执行降维。

__init__(n_components=2, algorithm='tsqr', n_iter=5, random_state=None, tol=0.0, compute=True)

使用截断 SVD(也称为 LSA)进行降维。

此转换器通过截断奇异值分解 (SVD) 执行线性降维。与 PCA 不同,此估计器在计算奇异值分解之前不会对数据进行中心化。

参数
n_componentsint, 默认值 = 2

所需输出数据的维度。必须小于或等于特征的数量。默认值对于可视化很有用。

algorithm{‘tsqr’, ‘randomized’}

要使用的 SVD 求解器。两者内部都使用 tsqr(“高瘦 QR”)算法。'randomized' 使用一种近似算法,它更快,但不精确。详见参考资料。

n_iterint, 可选(默认值 5)

幂迭代次数,在奇异值衰减缓慢时很有用。误差随着 n_iter 的增加呈指数下降。实际上,将 n_iter 设置为 <= 4。

random_stateint, RandomState 实例或 None, 可选

如果为 int,则 random_state 是随机数生成器使用的种子;如果为 RandomState 实例,则 random_state 是随机数生成器;如果为 None,则随机数生成器是 np.random 使用的 RandomState 实例。

tolfloat, 可选

被忽略。

computebool

是否应立即计算 SVD 结果,默认为 True。

属性
components_array, 形状 (n_components, n_features)
explained_variance_array, 形状 (n_components,)

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

explained_variance_ratio_array, 形状 (n_components,)

每个选定分量解释的方差百分比。

singular_values_array, 形状 (n_components,)

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

注意

SVD 存在一个名为“符号不确定性”的问题,这意味着 components_ 的符号和转换的输出取决于算法和随机状态。为了解决这个问题,将此类实例拟合到数据一次,然后保留该实例进行后续转换。

警告

当前的实现不支持稀疏矩阵。

参考资料

在 MapReduce 架构中高瘦矩阵的直接 QR 分解。A. Benson, D. Gleich, 和 J. Demmel. IEEE International Conference on Big Data, 2013. http://arxiv.org/abs/1301.1071

示例

>>> from dask_ml.decomposition import TruncatedSVD
>>> import dask.array as da
>>> X = da.random.normal(size=(1000, 20), chunks=(100, 20))
>>> svd = TruncatedSVD(n_components=5, n_iter=3, random_state=42)
>>> svd.fit(X)  
TruncatedSVD(algorithm='tsqr', n_components=5, n_iter=3,
             random_state=42, tol=0.0)
>>> print(svd.explained_variance_ratio_)  
[0.06386323 0.06176776 0.05901293 0.0576399  0.05726607]
>>> print(svd.explained_variance_ratio_.sum())  
0.299...
>>> print(svd.singular_values_)  
array([35.92469517, 35.32922121, 34.53368856, 34.138..., 34.013...])

请注意,transform 返回一个 dask.Array

>>> svd.transform(X)
dask.array<sum-agg, shape=(1000, 5), dtype=float64, chunksize=(100, 5)>