NMF#
- class sklearn.decomposition.NMF(n_components='auto', *, init=None, solver='cd', beta_loss='frobenius', tol=0.0001, max_iter=200, random_state=None, alpha_W=0.0, alpha_H='same', l1_ratio=0.0, verbose=0, shuffle=False)[原始碼]#
非負矩陣分解 (NMF)。
尋找兩個非負矩陣,即所有元素皆為非負數的矩陣 (W, H),其乘積近似於非負矩陣 X。此分解可用於例如降維、源分離或主題提取。
目標函數為
\[ \begin{align}\begin{aligned}L(W, H) &= 0.5 * ||X - WH||_{loss}^2\\ &+ alpha\_W * l1\_ratio * n\_features * ||vec(W)||_1\\ &+ alpha\_H * l1\_ratio * n\_samples * ||vec(H)||_1\\ &+ 0.5 * alpha\_W * (1 - l1\_ratio) * n\_features * ||W||_{Fro}^2\\ &+ 0.5 * alpha\_H * (1 - l1\_ratio) * n\_samples * ||H||_{Fro}^2,\end{aligned}\end{align} \]其中 \(||A||_{Fro}^2 = \sum_{i,j} A_{ij}^2\) (Frobenius 範數) 且 \(||vec(A)||_1 = \sum_{i,j} abs(A_{ij})\) (元素級 L1 範數)。
一般範數 \(||X - WH||_{loss}\) 可能代表 Frobenius 範數或其他支援的 beta 散度損失。選項之間的選擇由
beta_loss
參數控制。正規化項會按
W
的n_features
以及H
的n_samples
來縮放,以使其影響相對於彼此以及資料擬合項,盡可能獨立於訓練集的n_samples
大小。目標函數通過 W 和 H 的交替最小化來最小化。
請注意,轉換後的資料命名為 W,而組件矩陣命名為 H。在 NMF 文獻中,命名慣例通常相反,因為資料矩陣 X 是轉置的。
請在使用者指南中閱讀更多內容。
- 參數:
- n_componentsint 或 {‘auto’} 或 None,預設值為 ‘auto’
組件數。如果
None
,則保留所有特徵。如果n_components='auto'
,組件數會從 W 或 H 形狀自動推斷。版本變更於 1.4: 新增
'auto'
值。版本變更於 1.6: 預設值從
None
變更為'auto'
。- init{‘random’, ‘nndsvd’, ‘nndsvda’, ‘nndsvdar’, ‘custom’}, 預設值為 None
用於初始化程序的Method。有效選項為
None
:如果 n_components <= min(n_samples, n_features),則為 'nndsvda',否則為 random。'random'
:非負隨機矩陣,縮放為:sqrt(X.mean() / n_components)
'nndsvd'
:非負雙奇異值分解 (NNDSVD) 初始化 (更適合稀疏性)'nndsvda'
:NNDSVD,零值以 X 的平均值填入 (當不需要稀疏性時更好)'nndsvdar'
:NNDSVD,零值以小的隨機值填入 (當不需要稀疏性時,通常比 NNDSVDa 更快、精確度較低的替代方案)'custom'
:使用必須同時提供的自訂矩陣W
和H
。
版本變更於 1.1: 當
init=None
且 n_components 小於 n_samples 和 n_features 時,預設值為nndsvda
而不是nndsvd
。- solver{‘cd’, ‘mu’}, 預設值為 ‘cd’
要使用的數值求解器
‘cd’ 是座標下降求解器。
‘mu’ 是乘法更新求解器。
新增於 0.17 版: 座標下降求解器。
新增於 0.19 版: 乘法更新求解器。
- beta_lossfloat 或 {‘frobenius’, ‘kullback-leibler’, ‘itakura-saito’}, 預設值為 ‘frobenius’
要最小化的 Beta 散度,測量 X 與點積 WH 之間的距離。請注意,與 ‘frobenius’ (或 2) 和 ‘kullback-leibler’ (或 1) 不同的值會導致擬合速度明顯變慢。請注意,對於 beta_loss <= 0 (或 ‘itakura-saito’),輸入矩陣 X 不能包含零。僅在 ‘mu’ 求解器中使用。
新增於 0.19 版。
- tolfloat, 預設值為 1e-4
停止條件的容差。
- max_iterint, 預設值為 200
逾時前的最大迭代次數。
- random_stateint、RandomState 實例或 None,預設值為 None
用於初始化(當
init
== ‘nndsvdar’ 或 ‘random’ 時),以及座標下降。傳遞 int 以在多個函數呼叫中獲得可重現的結果。請參閱詞彙表。- alpha_Wfloat, 預設值為 0.0
乘以
W
的正規化項的常數。將其設定為零(預設值)則W
上沒有正規化。新增於 1.0 版。
- alpha_Hfloat 或 “same”,預設值為 “same”
乘以
H
的正規化項的常數。將其設定為零則H
上沒有正規化。如果為 “same”(預設值),則採用與alpha_W
相同的值。新增於 1.0 版。
- l1_ratiofloat, 預設值為 0.0
正規化混合參數,其中 0 <= l1_ratio <= 1。對於 l1_ratio = 0,懲罰是元素級 L2 懲罰 (又稱 Frobenius 範數)。對於 l1_ratio = 1,它是元素級 L1 懲罰。對於 0 < l1_ratio < 1,懲罰是 L1 和 L2 的組合。
新增於 0.17 版: 座標下降求解器中使用的正規化參數 l1_ratio。
- verboseint, 預設值為 0
是否顯示詳細資訊。
- shufflebool, 預設值為 False
如果為真,則在 CD 解算器中隨機化座標的順序。
在 0.17 版本中新增:shuffle 參數用於座標下降解算器。
- 屬性:
- components_形狀為 (n_components, n_features) 的 ndarray
因式分解矩陣,有時稱為「字典」。
- n_components_整數
組件的數量。如果給定了
n_components
參數,則它與該參數相同。否則,它將與特徵的數量相同。- reconstruction_err_浮點數
訓練資料
X
和擬合模型重建的資料WH
之間的矩陣差的 Frobenius 範數,或 beta 散度。- n_iter_整數
實際迭代次數。
- n_features_in_整數
在 fit 期間看到的特徵數量。
在 0.24 版本中新增。
- feature_names_in_形狀為 (
n_features_in_
,) 的 ndarray 在 fit 期間看到的特徵名稱。僅當
X
具有全部為字串的特徵名稱時才定義。新增於 1.0 版。
另請參閱
DictionaryLearning
尋找稀疏編碼資料的字典。
MiniBatchSparsePCA
小批量稀疏主成分分析。
PCA
主成分分析。
SparseCoder
從固定的預先計算的字典中尋找資料的稀疏表示法。
SparsePCA
稀疏主成分分析。
TruncatedSVD
使用截斷的 SVD 進行降維。
參考文獻
[1]「大規模非負矩陣和張量因式分解的快速局部演算法」 Cichocki, Andrzej 和 P. H. A. N. Anh-Huy。IEICE 電子、通信和電腦科學基礎學報 92.3: 708-721, 2009。
[2]「使用 beta 散度的非負矩陣因式分解演算法」 Fevotte, C., & Idier, J. (2011). Neural Computation, 23(9)。
範例
>>> import numpy as np >>> X = np.array([[1, 1], [2, 1], [3, 1.2], [4, 1], [5, 0.8], [6, 1]]) >>> from sklearn.decomposition import NMF >>> model = NMF(n_components=2, init='random', random_state=0) >>> W = model.fit_transform(X) >>> H = model.components_
- fit(X, y=None, **params)[原始碼]#
為資料 X 學習 NMF 模型。
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列、稀疏矩陣
訓練向量,其中
n_samples
是樣本的數量,而n_features
是特徵的數量。- y忽略
未使用,依慣例為了 API 的一致性而存在。
- **paramskwargs
傳遞到 fit_transform 實例的參數(關鍵字引數)和值。
- 傳回:
- self物件
傳回實例本身。
- fit_transform(X, y=None, W=None, H=None)[原始碼]#
為資料 X 學習 NMF 模型並傳回轉換的資料。
這比先呼叫 fit 再呼叫 transform 更有效率。
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列、稀疏矩陣
訓練向量,其中
n_samples
是樣本的數量,而n_features
是特徵的數量。- y忽略
未使用,依慣例為了 API 的一致性而存在。
- W形狀為 (n_samples, n_components) 的類陣列,預設值為 None
如果
init='custom'
,它會被用作解的初始猜測。如果None
,則使用init
中指定的初始化方法。- H形狀為 (n_components, n_features) 的類陣列,預設值為 None
如果
init='custom'
,它會被用作解的初始猜測。如果None
,則使用init
中指定的初始化方法。
- 傳回:
- W形狀為 (n_samples, n_components) 的 ndarray
轉換的資料。
- get_feature_names_out(input_features=None)[原始碼]#
取得轉換的輸出特徵名稱。
輸出特徵名稱將以小寫的類別名稱作為前綴。例如,如果轉換器輸出 3 個特徵,則輸出特徵名稱為:
["class_name0", "class_name1", "class_name2"]
。- 參數:
- input_featuresstr 或 None 的類陣列,預設值為 None
僅用於使用在
fit
中看到的名稱來驗證特徵名稱。
- 傳回:
- feature_names_outstr 物件的 ndarray
轉換的特徵名稱。
- get_metadata_routing()[原始碼]#
取得此物件的中繼資料路由。
請檢查 使用者指南,了解路由機制如何運作。
- 傳回:
- routingMetadataRequest
封裝路由資訊的
MetadataRequest
。
- get_params(deep=True)[原始碼]#
取得此估算器的參數。
- 參數:
- deepbool,預設值為 True
如果為 True,則會傳回此估算器的參數以及包含的子物件(這些子物件也是估算器)。
- 傳回:
- params字典
對應到其值的參數名稱。
- inverse_transform(X=None, *, Xt=None)[原始碼]#
將資料轉換回其原始空間。
在 0.18 版本中新增。
- 參數:
- X形狀為 (n_samples, n_components) 的 {ndarray、稀疏矩陣}
轉換的資料矩陣。
- Xt形狀為 (n_samples, n_components) 的 {ndarray、稀疏矩陣}
轉換的資料矩陣。
自 1.5 版本起已棄用:
Xt
已在 1.5 中棄用,並將在 1.7 中移除。請改用X
。
- 傳回:
- X形狀為 (n_samples, n_features) 的 ndarray
傳回原始形狀的資料矩陣。
- set_output(*, transform=None)[原始碼]#
設定輸出容器。
如需如何使用 API 的範例,請參閱 引入 set_output API。
- 參數:
- transform{"default", "pandas", "polars"},預設值為 None
設定
transform
和fit_transform
的輸出。"default"
:轉換器的預設輸出格式"pandas"
:DataFrame 輸出"polars"
:Polars 輸出None
:轉換設定保持不變
在 1.4 版本中新增:新增
"polars"
選項。
- 傳回:
- self估算器實例
估算器實例。