增量 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_components
為None
,則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_size
為None
,則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
將轉換器擬合到X
和y
,並回傳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
設定
transform
和fit_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)