當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python sklearn TruncatedSVD用法及代碼示例


本文簡要介紹python語言中 sklearn.decomposition.TruncatedSVD 的用法。

用法:

class sklearn.decomposition.TruncatedSVD(n_components=2, *, algorithm='randomized', n_iter=5, random_state=None, tol=0.0)

使用截斷的 SVD(又名 LSA)進行降維。

該轉換器通過截斷奇異值分解 (SVD) 執行線性降維。與 PCA 不同,此估計器在計算奇異值分解之前不會將數據居中。這意味著它可以有效地處理稀疏矩陣。

特別是,截斷的 SVD 適用於由 sklearn.feature_extraction.text 中的矢量化器返回的術語計數/tf-idf 矩陣。在這種情況下,它被稱為潛在語義分析(LSA)。

此估計器支持兩種算法:快速隨機 SVD 求解器和 “naive” 算法,該算法使用 ARPACK 作為 X * X.TX.T * X 上的特征值求解器,以更有效者為準。

在用戶指南中閱讀更多信息。

參數

n_components整數,默認=2

輸出數據的所需維度。必須嚴格小於特征數。默認值對可視化很有用。對於 LSA,建議值為 100。

algorithm{‘arpack’, ‘randomized’},默認='隨機'

要使用的 SVD 求解器。 “arpack” 用於 SciPy (scipy.sparse.linalg.svds) 中的 ARPACK 包裝器,或者 “randomized” 用於 Halko (2009) 的隨機算法。

n_iter整數,默認=5

隨機 SVD 求解器的迭代次數。 ARPACK 不使用。默認值大於 randomized_svd 中的默認值,以處理可能具有大的緩慢衰減頻譜的稀疏矩陣。

random_stateint、RandomState 實例或無,默認=無

在隨機 svd 期間使用。傳遞 int 以獲得跨多個函數調用的可重現結果。請參閱術語表。

tol浮點數,默認=0.0

ARPACK 的容差。 0 表示機器精度。被隨機 SVD 求解器忽略。

屬性

components_ndarray 形狀(n_components,n_features)

輸入數據的右奇異向量。

explained_variance_ndarray 形狀 (n_components,)

通過投影變換到每個分量的訓練樣本的方差。

explained_variance_ratio_ndarray 形狀 (n_components,)

每個選定組件解釋的方差百分比。

singular_values_ndarray od 形狀(n_components,)

對應於每個選定組件的奇異值。奇異值等於 lower-dimensional 空間中 n_components 變量的 2 範數。

n_features_in_int

擬合期間看到的特征數。

feature_names_in_ndarray 形狀(n_features_in_,)

擬合期間看到的特征名稱。僅當 X 具有全為字符串的函數名稱時才定義。

注意

SVD 遇到一個稱為“sign indeterminacy” 的問題,這意味著components_ 的符號和變換的輸出取決於算法和隨機狀態。要解決此問題,請將此類的實例與數據匹配一次,然後保留該實例以進行轉換。

參考

尋找具有隨機性的結構:構建近似矩陣分解的隨機算法 Halko 等人,2009 (arXiv:909) https://arxiv.org/pdf/0909.4061.pdf

例子

>>> 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...]

相關用法


注:本文由純淨天空篩選整理自scikit-learn.org大神的英文原創作品 sklearn.decomposition.TruncatedSVD。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。