KernelPCA#

class sklearn.decomposition.KernelPCA(n_components=None, *, kernel='linear', gamma=None, degree=3, coef0=1, kernel_params=None, alpha=1.0, fit_inverse_transform=False, eigen_solver='auto', tol=0, max_iter=None, iterated_power='auto', remove_zero_eig=False, random_state=None, copy_X=True, n_jobs=None)[source]#

核主成分分析 (KPCA)。

透過使用核函數進行非線性降維 [1],另請參閱成對度量、親和度和核函數

它使用 scipy.linalg.eigh LAPACK 完整 SVD 實作,或 scipy.sparse.linalg.eigsh ARPACK 截斷 SVD 實作,具體取決於輸入資料的形狀和要提取的元件數量。它還可以根據 [3] 中提出的方法使用隨機截斷 SVD,請參閱 eigen_solver

有關主成分分析 (PCA) 及其核化版本 (KPCA) 的使用範例和比較,請參閱核 PCA

有關使用 KPCA 進行影像去噪的使用範例,請參閱使用核 PCA 進行影像去噪

請在使用者指南中閱讀更多資訊。

參數:
n_componentsint,預設值=None

組件的數量。如果為 None,則保留所有非零組件。

kernel{'linear'、'poly'、'rbf'、'sigmoid'、'cosine'、'precomputed'} 或可呼叫物件,預設值='linear'

用於 PCA 的核心。

gammafloat,預設值=None

rbf、poly 和 sigmoid 核的核係數。其他核會忽略。如果 gammaNone,則會將其設定為 1/n_features

degreefloat,預設值=3

poly 核的度數。其他核會忽略。

coef0float,預設值=1

poly 和 sigmoid 核中的獨立項。其他核會忽略。

kernel_paramsdict,預設值=None

作為可呼叫物件傳遞的核的參數(關鍵字引數)和值。其他核會忽略。

alphafloat,預設值=1.0

學習反轉換(當 fit_inverse_transform=True 時)的嶺回歸的超參數。

fit_inverse_transformbool,預設值=False

學習非預先計算的核的反轉換(即學習尋找點的預影像)。此方法基於 [2]

eigen_solver{'auto'、'dense'、'arpack'、'randomized'},預設值='auto'

選擇要使用的特徵求解器。如果 n_components 遠小於訓練樣本的數量,則隨機(或在較小程度上使用 arpack)可能比密集特徵求解器更有效。隨機 SVD 根據 Halko 等人 [3] 的方法執行。

自動

求解器會根據 n_samples(訓練樣本數)和 n_components 透過預設原則進行選擇:如果要提取的元件數量小於 10(嚴格),且樣本數量大於 200(嚴格),則會啟用 'arpack' 方法。否則,會計算精確的完整特徵值分解,並可選擇在之後截斷('dense' 方法)。

密集

透過 scipy.linalg.eigh 呼叫標準 LAPACK 求解器來執行精確的完整特徵值分解,並透過後處理選擇元件

arpack

透過使用 scipy.sparse.linalg.eigsh 呼叫 ARPACK 求解器,將 SVD 截斷為 n_components。它嚴格要求 0 < n_components < n_samples

隨機

根據 Halko 等人的方法執行隨機 SVD [3]。目前的實作會根據其模組選擇特徵值;因此,如果核心不是正半定,使用此方法可能會導致意外的結果。另請參閱 [4]

在 1.0 版本中變更: 已新增 'randomized'

tolfloat,預設值=0

arpack 的收斂容差。如果為 0,arpack 會選擇最佳值。

max_iterint,預設值=None

arpack 的最大迭代次數。如果為 None,arpack 會選擇最佳值。

iterated_powerint >= 0,或 'auto',預設值='auto'

由 svd_solver == 'randomized' 計算的冪方法的迭代次數。當 'auto' 時,如果 n_components < 0.1 * min(X.shape),則設定為 7,否則設定為 4。

在 1.0 版本中新增。

remove_zero_eigbool,預設值=False

如果為 True,則會移除所有具有零特徵值的元件,因此輸出中的元件數量可能 < n_components(有時甚至因為數值不穩定而為零)。當 n_components 為 None 時,會忽略此參數,且會移除具有零特徵值的元件,無論如何。

random_stateint、RandomState 執行個體或 None,預設值=None

eigen_solver == 'arpack' 或 'randomized' 時使用。傳遞一個 int 以在多個函數呼叫中獲得可重現的結果。請參閱詞彙表

在 0.18 版本中新增。

copy_Xbool,預設值=True

如果為 True,則輸入 X 會被複製並由模型儲存在 X_fit_ 屬性中。如果不會對 X 進行進一步變更,則設定 copy_X=False 可以透過儲存參考來節省記憶體。

在 0.18 版本中新增。

n_jobsint,預設值=None

要執行的平行任務數量。None 表示 1,除非在 joblib.parallel_backend 環境中。-1 表示使用所有處理器。詳情請參閱詞彙表

在 0.18 版本中新增。

屬性:
eigenvalues_形狀為 (n_components,) 的 ndarray

中心化核矩陣的特徵值,按遞減順序排列。如果未設定 n_componentsremove_zero_eig,則會儲存所有值。

eigenvectors_形狀為 (n_samples, n_components) 的 ndarray

中心化核矩陣的特徵向量。如果未設定 n_componentsremove_zero_eig,則會儲存所有成分。

dual_coef_形狀為 (n_samples, n_features) 的 ndarray

反轉換矩陣。僅當 fit_inverse_transform 為 True 時可用。

X_transformed_fit_形狀為 (n_samples, n_components) 的 ndarray

擬合資料在核主成分上的投影。僅當 fit_inverse_transform 為 True 時可用。

X_fit_形狀為 (n_samples, n_features) 的 ndarray

用於擬合模型的資料。如果 copy_X=False,則 X_fit_ 是一個參考。此屬性用於轉換的呼叫。

n_features_in_整數

fit期間看到的特徵數量。

在 0.24 版本中新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

fit期間看到的特徵名稱。僅當 X 的特徵名稱都是字串時才定義。

在 1.0 版本中新增。

gamma_浮點數

rbf、poly 和 sigmoid 核的核係數。當明確提供 gamma 時,這與 gamma 相同。當 gammaNone 時,這是核係數的實際值。

在 1.3 版本中新增。

另請參閱

FastICA

獨立成分分析的快速演算法。

IncrementalPCA

增量主成分分析。

NMF

非負矩陣分解。

PCA

主成分分析。

SparsePCA

稀疏主成分分析。

TruncatedSVD

使用截斷 SVD 的降維。

參考文獻

範例

>>> from sklearn.datasets import load_digits
>>> from sklearn.decomposition import KernelPCA
>>> X, _ = load_digits(return_X_y=True)
>>> transformer = KernelPCA(n_components=7, kernel='linear')
>>> X_transformed = transformer.fit_transform(X)
>>> X_transformed.shape
(1797, 7)
fit(X, y=None)[原始碼]#

從 X 中的資料擬合模型。

參數:
X形狀為 (n_samples, n_features) 的類陣列、稀疏矩陣

訓練向量,其中 n_samples 是樣本數量,而 n_features 是特徵數量。

y忽略

不使用,為符合 API 慣例而存在。

傳回值:
self物件

傳回實例本身。

fit_transform(X, y=None, **params)[原始碼]#

從 X 中的資料擬合模型並轉換 X。

參數:
X形狀為 (n_samples, n_features) 的類陣列、稀疏矩陣

訓練向量,其中 n_samples 是樣本數量,而 n_features 是特徵數量。

y忽略

不使用,為符合 API 慣例而存在。

**paramskwargs

傳遞給 fit_transform 實例的參數(關鍵字參數)和值。

傳回值:
X_new形狀為 (n_samples, n_components) 的 ndarray

傳回實例本身。

get_feature_names_out(input_features=None)[原始碼]#

取得轉換的輸出特徵名稱。

輸出特徵名稱將以小寫類別名稱作為前綴。例如,如果轉換器輸出 3 個特徵,則輸出特徵名稱為:["class_name0", "class_name1", "class_name2"]

參數:
input_featuresstr 或 None 的類陣列,預設值為 None

僅用於驗證特徵名稱是否與 fit 中看到的名稱相同。

傳回值:
feature_names_outstr 物件的 ndarray

轉換後的特徵名稱。

get_metadata_routing()[原始碼]#

取得此物件的中繼資料路由。

請查看使用者指南,了解路由機制的運作方式。

傳回值:
routingMetadataRequest

封裝路由資訊的 MetadataRequest

get_params(deep=True)[原始碼]#

取得此估計器的參數。

參數:
deepbool,預設值為 True

如果為 True,將傳回此估計器的參數,以及包含的估計器子物件的參數。

傳回值:
paramsdict

對應到其值的參數名稱。

inverse_transform(X)[原始碼]#

將 X 轉換回原始空間。

inverse_transform 使用已學習的前像來逼近反轉換。前像是通過原始資料在低維表示向量上的核嶺迴歸來學習的。

注意

當使用者想要計算「線性」核的反轉換時,建議他們改用 PCA。與 PCA 不同的是,KernelPCAinverse_transform 在使用「線性」核時,由於使用了中心化核,因此不會重建資料的平均值。

參數:
X形狀為 (n_samples, n_components) 的類陣列、稀疏矩陣

訓練向量,其中 n_samples 是樣本數量,而 n_features 是特徵數量。

傳回值:
X_new形狀為 (n_samples, n_features) 的 ndarray

傳回實例本身。

參考文獻

Bakır, Gökhan H., Jason Weston, 和 Bernhard Schölkopf。「學習尋找前像」。神經信息處理系統進展 16 (2004):449-456。

set_output(*, transform=None)[原始碼]#

設定輸出容器。

請參閱介紹 set_output API,了解如何使用此 API 的範例。

參數:
transform{"default", "pandas", "polars"},預設值為 None

設定 transformfit_transform 的輸出。

  • "default":轉換器的預設輸出格式

  • "pandas":DataFrame 輸出

  • "polars":Polars 輸出

  • None:轉換組態未變更

在 1.4 版本中新增:新增了 "polars" 選項。

傳回值:
self估計器實例

估計器實例。

set_params(**params)[原始碼]#

設定此估計器的參數。

此方法適用於簡單的估算器,以及巢狀物件(例如 Pipeline)。後者具有 <元件>__<參數> 形式的參數,因此可以更新巢狀物件的每個元件。

參數:
**paramsdict

估算器參數。

傳回值:
self估計器實例

估計器實例。

transform(X)[原始碼]#

轉換 X。

參數:
X形狀為 (n_samples, n_features) 的類陣列、稀疏矩陣

訓練向量,其中 n_samples 是樣本數量,而 n_features 是特徵數量。

傳回值:
X_new形狀為 (n_samples, n_components) 的 ndarray

傳回實例本身。