当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python cuml.TruncatedSVD用法及代码示例


用法:

class cuml.TruncatedSVD(*, algorithm='full', handle=None, n_components=1, n_iter=15, random_state=None, tol=1e-07, verbose=False, output_type=None)

TruncatedSVD 用于计算大矩阵 X 的前 K 个奇异值和向量。当 n_components 较小时,速度要快得多,例如在使用 3 个分量进行 3D 可视化时使用 PCA。

cuML 的 TruncatedSVD 是一个 array-like 对象或 cuDF DataFrame,并提供 2 种算法 Full 和 Jacobi。 Full(默认)使用完整的特征分解,然后选择前 K 个奇异向量。 Jacobi 算法要快得多,因为它迭代地尝试纠正前 K 个奇异向量,但可能不太准确。

参数

algorithm‘full’ or ‘jacobi’ 或 ‘auto’(默认 = ‘full’)

Full 使用协方差矩阵的特征分解然后丢弃分量。 Jacobi 在迭代校正时要快得多,但准确性较低。

handlecuml.Handle

指定 cuml.handle 保存用于此模型中计算的内部 CUDA 状态。最重要的是,这指定了将用于模型计算的 CUDA 流,因此用户可以通过在多个流中创建句柄在不同的流中同时运行不同的模型。如果为 None,则创建一个新的。

n_componentsint(默认值 = 1)

您想要的前 K 个奇异向量/值的数量。必须是 <= 数字(列)。

n_iterint(默认值 = 15)

用于 Jacobi 求解器。迭代次数越多,精度越高,但速度越慢。

random_stateint /无(默认 = 无)

如果您希望重新启动 Python 时结果相同,请选择一个状态。

tol浮点数(默认 = 1e-7)

如果算法 = “jacobi” 则使用。较小的容差可以提高准确性,但会减慢算法的收敛速度。

verboseint 或布尔值,默认=False

设置日志记录级别。它必须是 cuml.common.logger.level_* 之一。有关详细信息,请参阅详细级别。

output_type{‘input’, ‘cudf’, ‘cupy’, ‘numpy’, ‘numba’},默认=无

用于控制估计器的结果和属性的输出类型的变量。如果为 None,它将继承在模块级别设置的输出类型 cuml.global_settings.output_type 。有关详细信息,请参阅输出数据类型配置。

注意

TruncatedSVD(随机版本 [Jacobi])在您想要的组件数量远小于函数数量时非常棒。对最大奇异值和向量的逼近非常稳健,但是,当您需要很多很多组件时,这种方法会失去很多准确性。

TruncatedSVD的应用

TruncatedSVD 也称为潜在语义索引 (LSI),它试图找到字数矩阵的主题。如果 X 以前以均值去除为中心,则 TruncatedSVD 与 TruncatedPCA 相同。TruncatedSVD 也用于信息检索任务、推荐系统和数据压缩。

有关其他文档,请参阅 scikitlearn’s TruncatedSVD docs

例子

# Both import methods supported
from cuml import TruncatedSVD
from cuml.decomposition import TruncatedSVD

import cudf
import numpy as np

gdf_float = cudf.DataFrame()
gdf_float['0'] = np.asarray([1.0,2.0,5.0], dtype = np.float32)
gdf_float['1'] = np.asarray([4.0,2.0,1.0], dtype = np.float32)
gdf_float['2'] = np.asarray([4.0,2.0,1.0], dtype = np.float32)

tsvd_float = TruncatedSVD(n_components = 2, algorithm = "jacobi",
                          n_iter = 20, tol = 1e-9)
tsvd_float.fit(gdf_float)

print(f'components: {tsvd_float.components_}')
print(f'explained variance: {tsvd_float._explained_variance_}')
exp_var = tsvd_float._explained_variance_ratio_
print(f'explained variance ratio: {exp_var}')
print(f'singular values: {tsvd_float._singular_values_}')

trans_gdf_float = tsvd_float.transform(gdf_float)
print(f'Transformed matrix: {trans_gdf_float}')

input_gdf_float = tsvd_float.inverse_transform(trans_gdf_float)
print(f'Input matrix: {input_gdf_float}')

输出:

components:            0           1          2
0 0.58725953  0.57233137  0.5723314
1 0.80939883 -0.41525528 -0.4152552
explained variance:
0  55.33908
1 16.660923

explained variance ratio:
0  0.7685983
1 0.23140171

singular values:
0  7.439024
1 4.0817795

Transformed Matrix:
0           1         2
0   5.1659107    -2.512643
1   3.4638448    -0.042223275
2    4.0809603   3.2164836

Input matrix:           0         1         2
0       1.0  4.000001  4.000001
1 2.0000005 2.0000005 2.0000007
2  5.000001 0.9999999 1.0000004

属性

components_数组

U, S, VT = svd(X) 中的前 K 个分量 (VT.T[:,:n_components])

explained_variance_数组

每个组件在多大程度上解释了 S**2 给出的数据中的差异

explained_variance_ratio_数组

S**2/sum(S**2) 解释了多少百分比的方差

singular_values_数组

前 K 个奇异值。记住所有奇异值 >= 0

相关用法


注:本文由纯净天空筛选整理自rapids.ai大神的英文原创作品 cuml.TruncatedSVD。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。