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


Python sklearn non_negative_factorization用法及代碼示例


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

用法:

sklearn.decomposition.non_negative_factorization(X, W=None, H=None, n_components=None, *, init='warn', update_H=True, solver='cd', beta_loss='frobenius', tol=0.0001, max_iter=200, alpha='deprecated', alpha_W=0.0, alpha_H='same', l1_ratio=0.0, regularization='deprecated', random_state=None, verbose=0, shuffle=False)

計算非負矩陣分解 (NMF)。

找到兩個非負矩陣 (W, H),其乘積近似於非負矩陣 X。這種分解可用於例如降維、源分離或主題提取。

目標函數為:

其中:

(弗羅貝尼烏斯範數)

(元素級 L1 範數)

通用範數 可能代表 Frobenius 範數或其他支持的 beta-divergence 損失。選項之間的選擇由beta_loss 參數控製。

正則化項按n_featuresWn_samplesH 進行縮放,以使它們的影響相互之間保持平衡,並盡可能獨立於數據擬合項的大小n_samples訓練集。

目標函數通過 W 和 H 的交替最小化來最小化。如果給定 H 並且 update_H=False,它隻求解 W。

參數

X形狀類似數組 (n_samples, n_features)

常數矩陣。

W形狀類似數組(n_samples,n_components),默認=無

如果 init='custom',它被用作解決方案的初始猜測。

H形狀類似數組 (n_components, n_features),默認=None

如果 init='custom',它被用作解決方案的初始猜測。如果 update_H=False,則用作常數,僅求解 W。

n_components整數,默認=無

組件數,如果未設置 n_components 則保留所有特征。

init{‘random’, ‘nndsvd’, ‘nndsvda’, ‘nndsvdar’, ‘custom’},默認=無

用於初始化過程的方法。

有效選項:

  • 無:‘nndsvd’ 如果 n_components < n_features,否則 ‘random’。
  • ‘random’:非負隨機矩陣,按比例縮放:

    sqrt(X.mean() /n_components)

  • ‘nndsvd’:非負雙奇異值分解 (NNDSVD)

    初始化(更好的稀疏性)

  • ‘nndsvda’:NNDSVD 用 X 的平均值填充零

    (不希望稀疏時更好)

  • ‘nndsvdar’:NNDSVD 用小隨機值填充零

    (當不需要稀疏性時,通常是 NNDSVDa 更快、更不準確的替代方案)

  • ‘custom’:如果 update_H=True ,則使用自定義矩陣 W 和 H。如果 update_H=False ,則僅使用自定義矩陣 H。
update_H布爾,默認=真

設置為 True,W 和 H 都將根據初始猜測進行估計。設置為 False,僅估計 W。

solver{‘cd’, ‘mu’},默認='cd'

要使用的數值求解器:

  • ‘cd’ 是使用快速分層的坐標下降求解器

    交替最小二乘法(快速 HALS)。

  • ‘mu’ 是一個乘法更新求解器。
beta_loss浮點數或 {‘frobenius’, 'kullback-leibler', 'itakura-saito'}, 默認='frobenius'

要最小化的 Beta 散度,測量 X 和點積 WH 之間的距離。請注意,與 ‘frobenius’(或 2)和“kullback-leibler”(或 1)不同的值會導致擬合顯著變慢。請注意,對於beta_loss <= 0(或“itakura-saito”),輸入矩陣 X 不能包含零。僅在 ‘mu’ 求解器中使用。

tol浮點數,默認=1e-4

停止條件的容差。

max_iter整數,默認=200

超時前的最大迭代次數。

alpha浮點數,默認=0.0

乘以正則化項的常數。將其設置為零以不進行正則化。當使用 alpha 而不是 alpha_Walpha_H 時,正則化項不會被 n_features(分別為 n_samples )因子縮放為 W(分別為 H )。

alpha_W浮點數,默認=0.0

乘以 W 的正則化項的常數。將其設置為零(默認)以在 W 上沒有正則化。

alpha_H浮點數或“same”,默認=”same”

乘以 H 的正則化項的常數。將其設置為零以在 H 上沒有正則化。如果 “same” (默認),它采用與 alpha_W 相同的值。

l1_ratio浮點數,默認=0.0

正則化混合參數,0 <= l1_ratio <= 1。對於 l1_ratio = 0,懲罰是元素 L2 懲罰(又名 Frobenius 範數)。對於 l1_ratio = 1,它是元素級 L1 懲罰。對於 0 < l1_ratio < 1,懲罰是 L1 和 L2 的組合。

regularization{‘both’, ‘components’, ‘transformation’},默認=無

選擇正則化是否影響分量 (H)、變換 (W),兩者都影響或都不影響。

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

用於 NMF 初始化(當 init == ‘nndsvdar’ 或 ‘random’ 時)和坐標下降。傳遞 int 以獲得跨多個函數調用的可重現結果。請參閱術語表。

verbose整數,默認=0

詳細程度。

shuffle布爾,默認=假

如果為真,則隨機化 CD 求解器中的坐標順序。

返回

Wndarray 形狀(n_samples,n_components)

非負最小二乘問題的解。

Hndarray 形狀(n_components,n_features)

非負最小二乘問題的解。

n_iterint

實際迭代次數。

參考

Cichocki、Andrzej 和 P.H.A.N.Anh-Huy。 “用於大規模非負矩陣和張量分解的快速局部算法。” IEICE 電子、通信和計算機科學基礎交易 92.3: 708-721, 2009。

Fevotte, C. 和 Idier, J. (2011)。 beta-divergence 的非負矩陣分解算法。神經計算,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 non_negative_factorization
>>> W, H, n_iter = non_negative_factorization(X, n_components=2,
... init='random', random_state=0)

相關用法


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