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


Python cuml.PCA用法及代码示例


用法:

class cuml.PCA(*, copy=True, handle=None, iterated_power=15, n_components=None, random_state=None, svd_solver='auto', tol=1e-07, verbose=False, whiten=False, output_type=None)

PCA(主成分分析)是一种基本的降维技术,用于将 X 中的特征组合成线性组合,以便每个新成分捕获数据的最多信息或方差。 N_components 通常很小,比如 3,可用于数据可视化、数据压缩和探索性分析。

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

参数

copy布尔值(默认 = True)

如果为真,则复制数据,然后从数据中删除均值。 False 可能会导致数据被其平均居中版本覆盖。

handlecuml.Handle

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

iterated_powerint(默认值 = 15)

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

n_componentsint(默认 = 无)

您想要的前 K 个奇异向量/值的数量。必须是 <= 数字(列)。如果未设置 n_components,则保留所有组件:

n_components = min(n_samples, n_features)

random_stateint /无(默认 = 无)

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

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

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

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

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

verboseint 或布尔值,默认=False

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

whiten布尔值(默认 = False)

如果为真,de-correlates 组件。这是通过将它们除以相应的奇异值然后乘以 sqrt(n_samples) 来完成的。白化允许每个组件具有单位方差并删除multi-collinearity。它可能对像LinearRegression 这样的相关特征会导致问题的下游任务有益。

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

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

注意

PCA 考虑特征的线性组合,特别是那些最大化全局方差结构的组合。这意味着 PCA 非常适合全局结构分析,但不适用于局部关系。考虑 UMAP 或 T-SNE 用于本地重要的嵌入。

PCA的应用

PCA 在实践中广泛用于数据可视化和数据压缩。它已被用于在 2 或 3 维、日常物体和图像的大型数据集中可视化极大的词嵌入,如 Word2Vec 和GloVe,并用于区分癌细胞和健康细胞。

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

例子

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

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)

pca_float = PCA(n_components = 2)
pca_float.fit(gdf_float)

print(f'components: {pca_float.components_}')
print(f'explained variance: {pca_float.explained_variance_}')
exp_var = pca_float.explained_variance_ratio_
print(f'explained variance ratio: {exp_var}')

print(f'singular values: {pca_float.singular_values_}')
print(f'mean: {pca_float.mean_}')
print(f'noise variance: {pca_float.noise_variance_}')

trans_gdf_float = pca_float.transform(gdf_float)
print(f'Inverse: {trans_gdf_float}')

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

输出:

components:
            0           1           2
            0  0.69225764  -0.5102837 -0.51028395
            1 -0.72165036 -0.48949987  -0.4895003

explained variance:

            0   8.510402
            1 0.48959687

explained variance ratio:

             0   0.9456003
             1 0.054399658

singular values:

           0 4.1256275
           1 0.9895422

mean:

          0 2.6666667
          1 2.3333333
          2 2.3333333

noise variance:

      0  0.0

transformed matrix:
             0           1
             0   -2.8547091 -0.42891636
             1 -0.121316016  0.80743366
             2    2.9760244 -0.37851727

Input Matrix:
          0         1         2
          0 1.0000001 3.9999993       4.0
          1       2.0 2.0000002 1.9999999
          2 4.9999995 1.0000006       1.0

属性

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

mean_数组

X 的逐列平均值。用于表示 - 首先将数据居中。

noise_variance_浮点数

来自 Bishop 1999 年的教科书。用于以后的任务,例如计算 X 的估计协方差。

相关用法


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