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 核的核係數。其他核會忽略。如果
gamma
為None
,則會將其設定為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_components
和remove_zero_eig
,則會儲存所有值。- eigenvectors_形狀為 (n_samples, n_components) 的 ndarray
中心化核矩陣的特徵向量。如果未設定
n_components
和remove_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
相同。當gamma
為None
時,這是核係數的實際值。在 1.3 版本中新增。
另請參閱
FastICA
獨立成分分析的快速演算法。
IncrementalPCA
增量主成分分析。
NMF
非負矩陣分解。
PCA
主成分分析。
SparsePCA
稀疏主成分分析。
TruncatedSVD
使用截斷 SVD 的降維。
參考文獻
[1]Schölkopf, Bernhard, Alexander Smola, 和 Klaus-Robert Müller。「核主成分分析」。國際人工神經網路會議。施普林格,柏林,海德堡,1997 年。
範例
>>> 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
不同的是,KernelPCA
的inverse_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
設定
transform
和fit_transform
的輸出。"default"
:轉換器的預設輸出格式"pandas"
:DataFrame 輸出"polars"
:Polars 輸出None
:轉換組態未變更
在 1.4 版本中新增:新增了
"polars"
選項。
- 傳回值:
- self估計器實例
估計器實例。