當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。