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
输出数据的期望维度。必须小于或等于特征的数量。默认值适用于可视化。
- 算法{‘tsqr’, ‘randomized’}
使用的SVD求解器。两者内部都使用 `tsqr`(用于“高瘦QR分解”)算法。’randomized’ 使用一个更快的近似算法,但不是精确的。更多信息请参见参考文献。
- n_iterint, 可选 (默认值为 0)
功率迭代次数,当奇异值衰减缓慢时很有用。误差随着 n_power_iter 的增加呈指数级减少。在实践中,设置 n_power_iter <= 4。
- random_stateint, RandomState 实例或 None, 可选
如果为整数,random_state 是随机数生成器使用的种子;如果为 RandomState 实例,random_state 是随机数生成器;如果为 None,随机数生成器是 np.random 使用的 RandomState 实例。
- tolfloat, 可选
忽略。
- 计算布尔
是否应立即计算SVD结果,默认为True。
- 属性
- 组件array, 形状 (n_components, n_features)
- explained_variance_数组,形状 (n_components,)
训练样本通过投影到每个分量后的方差。
- explained_variance_ratio_数组,形状 (n_components,)
每个选定成分解释的方差百分比。
- singular_values_数组,形状 (n_components,)
每个选定组件对应的奇异值。这些奇异值等于低维空间中
n_components
变量的2-范数。
注释
SVD 存在一个称为“符号不确定性”的问题,这意味着
components_
的符号和变换的输出取决于算法和随机状态。为了解决这个问题,请将此类实例拟合到数据一次,然后保留该实例以进行变换。警告
当前的实现不支持稀疏矩阵。
参考文献
在MapReduce架构中对高瘦矩阵进行直接QR分解。A. Benson, D. Gleich, 和 J. Demmel. IEEE国际大数据会议, 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)>