截斷 SVD#
- class sklearn.decomposition.TruncatedSVD(n_components=2, *, algorithm='randomized', n_iter=5, n_oversamples=10, power_iteration_normalizer='auto', random_state=None, tol=0.0)[原始碼]#
使用截斷 SVD(又稱 LSA)進行降維。
此轉換器通過截斷奇異值分解 (SVD) 執行線性降維。與 PCA 相反,此估計器在計算奇異值分解之前不會將資料置中。這表示它可以有效地處理稀疏矩陣。
特別是,截斷 SVD 可處理
sklearn.feature_extraction.text
中向量器傳回的詞語計數/tf-idf 矩陣。在這種情況下,它被稱為潛在語義分析 (LSA)。此估計器支援兩種演算法:一種快速隨機 SVD 求解器,以及一種在
X * X.T
或X.T * X
上使用 ARPACK 作為特徵求解器的「naive」演算法,以較有效率者為準。請在使用者指南中閱讀更多內容。
- 參數:
- n_componentsint, 預設值 = 2
輸出資料所需的維度。如果 algorithm='arpack',則必須嚴格小於特徵數量。如果 algorithm='randomized',則必須小於或等於特徵數量。預設值適用於視覺化。對於 LSA,建議值為 100。
- algorithm{‘arpack’, ‘randomized’}, 預設值 = ‘randomized’
要使用的 SVD 求解器。可以使用 SciPy 中的 ARPACK 包裝函式 (scipy.sparse.linalg.svds) 的 "arpack",或使用 Halko (2009) 提出的隨機演算法的 "randomized"。
- n_iterint, 預設值 = 5
隨機 SVD 求解器的迭代次數。ARPACK 不使用。預設值大於
randomized_svd
中的預設值,以處理可能具有較大緩慢衰減頻譜的稀疏矩陣。- n_oversamplesint, 預設值 = 10
隨機 SVD 求解器的過取樣數。ARPACK 不使用。請參閱
randomized_svd
以取得完整說明。在 1.1 版中新增。
- power_iteration_normalizer{‘auto’, ‘QR’, ‘LU’, ‘none’}, 預設值 = ‘auto’
隨機 SVD 求解器的冪次迭代正規化器。ARPACK 不使用。請參閱
randomized_svd
以取得更多詳細資訊。在 1.1 版中新增。
- random_stateint、RandomState 執行個體或 None,預設值 = None
在隨機 svd 期間使用。傳遞 int 以在多次函式呼叫中獲得可重現的結果。請參閱詞彙表。
- tolfloat,預設值 = 0.0
ARPACK 的容差。0 表示機器精確度。隨機 SVD 求解器會忽略此值。
- 屬性:
- components_形狀為 (n_components, n_features) 的 ndarray
輸入資料的右奇異向量。
- explained_variance_形狀為 (n_components,) 的 ndarray
藉由投影到每個元件轉換的訓練樣本變異數。
- explained_variance_ratio_形狀為 (n_components,) 的 ndarray
每個選定元件所解釋的變異數百分比。
- singular_values_形狀為 (n_components,) 的 ndarray
與每個選定元件對應的奇異值。奇異值等於較低維度空間中
n_components
變數的 2-範數。- n_features_in_int
在fit期間看到的特徵數量。
在 0.24 版中新增。
- feature_names_in_形狀為 (
n_features_in_
,) 的 ndarray 在fit期間看到的特徵名稱。僅當
X
具有全部為字串的特徵名稱時才定義。在 1.0 版中新增。
另請參閱
DictionaryLearning
FactorAnalysis
尋找稀疏編碼資料的字典。
IncrementalPCA
KernelPCA
帶有高斯潛在變數的簡單線性生成模型。
NMF
PCA
增量主成分分析。
核心主成分分析。
範例
>>> from sklearn.decomposition import TruncatedSVD >>> from scipy.sparse import csr_matrix >>> import numpy as np >>> np.random.seed(0) >>> X_dense = np.random.rand(100, 100) >>> X_dense[:, 2 * np.arange(50)] = 0 >>> X = csr_matrix(X_dense) >>> svd = TruncatedSVD(n_components=5, n_iter=7, random_state=42) >>> svd.fit(X) TruncatedSVD(n_components=5, n_iter=7, random_state=42) >>> print(svd.explained_variance_ratio_) [0.0157... 0.0512... 0.0499... 0.0479... 0.0453...] >>> print(svd.explained_variance_ratio_.sum()) 0.2102... >>> print(svd.singular_values_) [35.2410... 4.5981... 4.5420... 4.4486... 4.3288...]
-
PCA
主成分分析。
- 參數:
- 注意事項
SVD 存在一個稱為「符號不確定性」的問題,這表示
components_
的符號和轉換的輸出取決於演算法和隨機狀態。為了解決此問題,請將此類別的執行個體擬合到資料一次,然後保留該執行個體以執行轉換。- 參考文獻
Halko 等人 (2009)。「Finding structure with randomness: Stochastic algorithms for constructing approximate matrix decompositions」
- fit(X, y=None)[原始碼]#
- 將模型擬合到訓練資料 X。
X形狀為 (n_samples, n_features) 的類陣列、稀疏矩陣
- 訓練資料。
y已忽略
- get_feature_names_out(input_features=None)[原始碼]#
取得轉換後的輸出特徵名稱。
輸出特徵名稱會以小寫的類別名稱為前綴。例如,如果轉換器輸出 3 個特徵,則輸出特徵名稱為:
["class_name0", "class_name1", "class_name2"]
。
- get_metadata_routing()[原始碼]#
取得此物件的中繼資料路由。
請查閱 使用者指南,了解路由機制如何運作。
- fit(X, y=None)[原始碼]#
- routingMetadataRequest
一個
MetadataRequest
,封裝了路由資訊。
- set_output(*, transform=None)[原始碼]#
設定輸出容器。
請參閱 介紹 set_output API,其中有關於如何使用此 API 的範例。