增量 PCA#

class sklearn.decomposition.IncrementalPCA(n_components=None, *, whiten=False, copy=True, batch_size=None)[原始碼]#

增量主成分分析 (IPCA)。

使用資料的奇異值分解 (Singular Value Decomposition) 進行線性降維,僅保留最重要的奇異向量,將資料投影到較低維度的空間。在應用 SVD 之前,輸入資料會針對每個特徵進行居中處理,但不會進行縮放。

根據輸入資料的大小,此演算法可能比 PCA 更節省記憶體,並允許稀疏輸入。

此演算法具有恆定的記憶體複雜度,其階數為 batch_size * n_features,因此可以使用 np.memmap 檔案而無需將整個檔案載入記憶體。對於稀疏矩陣,輸入會分批轉換為密集格式(以便能夠減去平均值),這樣可以避免一次儲存整個密集矩陣。

每次 SVD 的計算開銷為 O(batch_size * n_features ** 2),但一次只會在記憶體中保留 2 * batch_size 個樣本。將會有 n_samples / batch_size 次 SVD 計算來獲得主成分,而 PCA 則是一次複雜度為 O(n_samples * n_features ** 2) 的大型 SVD。

有關使用範例,請參閱增量 PCA

使用者指南中閱讀更多內容。

於 0.16 版本新增。

參數:
n_componentsint,預設值=None

要保留的成分數量。如果 n_componentsNone,則 n_components 會設定為 min(n_samples, n_features)

whitenbool,預設值=False

當為 True 時(預設值為 False),components_ 向量會除以 n_samples 乘以 components_,以確保不相關的輸出具有單位成分方差。

白化處理會從轉換後的訊號中移除一些資訊(成分的相對變異數尺度),但有時可以透過使資料符合某些硬連線假設,來提高下游估計器的預測準確性。

copybool,預設值=True

如果為 False,則 X 會被覆寫。copy=False 可以用來節省記憶體,但不適用於一般使用。

batch_sizeint,預設值=None

每個批次要使用的樣本數量。僅在呼叫 fit 時使用。如果 batch_sizeNone,則 batch_size 會從資料推斷並設定為 5 * n_features,以在近似準確度和記憶體消耗之間取得平衡。

屬性:
components_ndarray,形狀為 (n_components, n_features)

特徵空間中的主軸,代表資料中最大變異數的方向。等效地說,中心輸入資料的右奇異向量,平行於其特徵向量。成分會按 explained_variance_ 遞減排序。

explained_variance_ndarray,形狀為 (n_components,)

每個選定成分解釋的變異數。

explained_variance_ratio_ndarray,形狀為 (n_components,)

每個選定成分解釋的變異數百分比。如果儲存所有成分,則解釋變異數的總和等於 1.0。

singular_values_ndarray,形狀為 (n_components,)

對應於每個選定成分的奇異值。奇異值等於較低維度空間中 n_components 變數的 2-範數。

mean_ndarray,形狀為 (n_features,)

每個特徵的經驗平均值,在呼叫 partial_fit 時匯總。

var_ndarray,形狀為 (n_features,)

每個特徵的經驗變異數,在呼叫 partial_fit 時匯總。

noise_variance_float

根據 Tipping 和 Bishop 1999 年的機率性 PCA 模型,估計的雜訊共變異數。請參閱 C. Bishop 的「Pattern Recognition and Machine Learning」第 12.2.1 節,第 574 頁,或 http://www.miketipping.com/papers/met-mppca.pdf

n_components_int

估計的成分數量。當 n_components=None 時相關。

n_samples_seen_int

估計器處理的樣本數量。在新的 fit 呼叫時會重設,但在 partial_fit 呼叫時會遞增。

batch_size_int

batch_size 推斷出的批次大小。

n_features_in_int

fit期間看到的特徵數量。

於 0.24 版本新增。

feature_names_in_ndarray,形狀為 (n_features_in_,)

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

於 1.0 版本新增。

參見

PCA

主成分分析 (PCA)。

KernelPCA

核主成分分析 (KPCA)。

SparsePCA

稀疏主成分分析 (SparsePCA)。

TruncatedSVD

使用截斷 SVD 進行降維。

註解

實作以下論文中的增量 PCA 模型:D. Ross, J. Lim, R. Lin, M. Yang, Incremental Learning for Robust Visual Tracking, International Journal of Computer Vision, Volume 77, Issue 1-3, pp. 125-141, May 2008. 請參閱 https://www.cs.toronto.edu/~dross/ivt/RossLimLinYang_ijcv.pdf

此模型是以下論文中循序卡胡南-洛伊變換的延伸:A. Levy and M. Lindenbaum, Sequential Karhunen-Loeve Basis Extraction and its Application to Images, IEEE Transactions on Image Processing, Volume 9, Number 8, pp. 1371-1374, August 2000.

我們明確地避免了兩篇論文作者所使用的最佳化方法,即在特定情況下用來降低 SVD 演算法複雜度的 QR 分解。此技術的來源為 Matrix Computations, Third Edition, G. Holub and C. Van Loan, Chapter 5, section 5.4.4, pp 252-253.。省略此技術的原因在於,它僅在分解的矩陣具有 n_samples(列) >= 5/3 * n_features(行)時才有優勢,並且會損害已實作演算法的可讀性。如果認為有必要,這會是一個未來最佳化的好機會。

參考文獻

D. Ross, J. Lim, R. Lin, M. Yang. Incremental Learning for Robust Visual Tracking, International Journal of Computer Vision, Volume 77, Issue 1-3, pp. 125-141, May 2008.

G. Golub and C. Van Loan. Matrix Computations, Third Edition, Chapter 5, Section 5.4.4, pp. 252-253.

範例

>>> from sklearn.datasets import load_digits
>>> from sklearn.decomposition import IncrementalPCA
>>> from scipy import sparse
>>> X, _ = load_digits(return_X_y=True)
>>> transformer = IncrementalPCA(n_components=7, batch_size=200)
>>> # either partially fit on smaller batches of data
>>> transformer.partial_fit(X[:100, :])
IncrementalPCA(batch_size=200, n_components=7)
>>> # or let the fit function itself divide the data into batches
>>> X_sparse = sparse.csr_matrix(X)
>>> X_transformed = transformer.fit_transform(X_sparse)
>>> X_transformed.shape
(1797, 7)
fit(X, y=None)[來源]#

使用大小為 batch_size 的小批次資料,以 X 擬合模型。

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

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

y已忽略

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

回傳:
self物件

回傳實例本身。

fit_transform(X, y=None, **fit_params)[來源]#

擬合資料,然後轉換資料。

使用選用參數 fit_params 將轉換器擬合到 Xy,並回傳 X 的轉換版本。

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

輸入樣本。

y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列,預設值為 None

目標值(無監督轉換為 None)。

**fit_paramsdict

額外的擬合參數。

回傳:
X_new形狀為 (n_samples, n_features_new) 的 ndarray 陣列

已轉換的陣列。

get_covariance()[來源]#

使用產生模型計算資料共變數。

cov = components_.T * S**2 * components_ + sigma2 * eye(n_features),其中 S**2 包含解釋變異數,而 sigma2 包含雜訊變異數。

回傳:
cov形狀為 (n_features, n_features) 的陣列

資料的預估共變數。

get_feature_names_out(input_features=None)[來源]#

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

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

參數:
input_features字串或 None 的類陣列,預設值為 None

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

回傳:
feature_names_out字串物件的 ndarray

已轉換的特徵名稱。

get_metadata_routing()[來源]#

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

請檢查 使用者指南,瞭解路由機制如何運作。

回傳:
routingMetadataRequest

一個 MetadataRequest,封裝路由資訊。

get_params(deep=True)[來源]#

取得此估算器的參數。

參數:
deep布林值,預設值為 True

如果為 True,將回傳此估算器和所包含的子物件(為估算器)的參數。

回傳:
paramsdict

參數名稱對應到其值的字典。

get_precision()[原始碼]#

使用生成模型計算資料的精確度矩陣。

等於共變異數的反矩陣,但為了效率,使用矩陣反轉引理計算。

回傳:
precision陣列,形狀為 (n_features, n_features)

資料的估計精確度。

inverse_transform(X)[原始碼]#

將資料轉換回原始空間。

換句話說,回傳一個輸入 X_original,其轉換會是 X。

參數:
X類陣列,形狀為 (n_samples, n_components)

新資料,其中 n_samples 是樣本數,n_components 是成分數。

回傳:
X_original 類陣列,形狀為 (n_samples, n_features)

原始資料,其中 n_samples 是樣本數,n_features 是特徵數。

註解

如果啟用了白化,inverse_transform 將計算精確的反向操作,包括反轉白化。

partial_fit(X, y=None, check_input=True)[原始碼]#

使用 X 進行增量擬合。X 的所有內容都作為單一批次處理。

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

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

y已忽略

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

check_input布林值,預設為 True

在 X 上執行 check_array。

回傳:
self物件

回傳實例本身。

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)。後者的參數格式為 <component>__<parameter>,因此可以更新巢狀物件的每個元件。

參數:
**params字典

估計器參數。

回傳:
self估計器實例

估計器實例。

transform(X)[原始碼]#

將降維應用於 X。

X 會投影到先前從訓練集提取的第一個主成分上,如果 X 是稀疏的,則使用大小為 batch_size 的小批次。

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

新資料,其中 n_samples 是樣本數,n_features 是特徵數。

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

X 在第一個主成分上的投影。

範例

>>> import numpy as np
>>> from sklearn.decomposition import IncrementalPCA
>>> X = np.array([[-1, -1], [-2, -1], [-3, -2],
...               [1, 1], [2, 1], [3, 2]])
>>> ipca = IncrementalPCA(n_components=2, batch_size=3)
>>> ipca.fit(X)
IncrementalPCA(batch_size=3, n_components=2)
>>> ipca.transform(X)