截斷 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.TX.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

DictionaryLearning

FactorAnalysis

尋找稀疏編碼資料的字典。

IncrementalPCA

PCA

KernelPCA

帶有高斯潛在變數的簡單線性生成模型。

NMF

IncrementalPCA

PCA

增量主成分分析。

KernelPCA

核心主成分分析。

NMF

非負矩陣分解。

範例

>>> 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已忽略

參數:
注意事項

SVD 存在一個稱為「符號不確定性」的問題,這表示 components_ 的符號和轉換的輸出取決於演算法和隨機狀態。為了解決此問題,請將此類別的執行個體擬合到資料一次,然後保留該執行個體以執行轉換。

參考文獻

Halko 等人 (2009)。「Finding structure with randomness: Stochastic algorithms for constructing approximate matrix decompositions」

fit(X, y=None)[原始碼]#
未使用,此處為方便起見,為了 API 一致性而存在。

傳回值:

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

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

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

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

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

fit(X, y=None)[原始碼]#
feature_names_out字串物件的 ndarray

轉換後的特徵名稱。

get_metadata_routing()[原始碼]#

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

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

fit(X, y=None)[原始碼]#
routingMetadataRequest

一個 MetadataRequest,封裝了路由資訊。

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

取得此估計器的參數。

參數:
deepbool,預設值為 True

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

fit(X, y=None)[原始碼]#
paramsdict

參數名稱對應到它們的值。

inverse_transform(X)[原始碼]#

將 X 反向轉換回其原始空間。

回傳一個 X_original 陣列,其轉換將會是 X。

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

新資料。

fit(X, y=None)[原始碼]#
X_original形狀為 (n_samples, n_features) 的 ndarray

請注意,這永遠是一個密集陣列。

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

設定輸出容器。

請參閱 介紹 set_output API,其中有關於如何使用此 API 的範例。

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

設定 transformfit_transform 的輸出。

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

  • "pandas":DataFrame 輸出

  • "polars":Polars 輸出

  • None:轉換設定不變

1.4 版新增: 新增了 "polars" 選項。

fit(X, y=None)[原始碼]#
self估計器實例

估計器實例。

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

設定此估計器的參數。

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

參數:
**paramsdict

估計器參數。

fit(X, y=None)[原始碼]#
self估計器實例

估計器實例。

transform(X)[原始碼]#

對 X 執行降維。

參數:
注意事項

新資料。

fit(X, y=None)[原始碼]#
未使用,此處為方便起見,為了 API 一致性而存在。

傳回值: