2014-07-14 12 views
6

我在非常大的矩陣上應用非負矩陣分解(NMF)。實質上,NMF方法執行以下操作:給定m乘n矩陣A,NMF分解爲A = WH,其中W是m乘以d,H是d乘n。 ProjectedGradientNMF方法在Python包Sklearn中實現。我想要算法返回W和H.但它似乎只返回H,而不是W.再次應用該算法到AT(轉置)可以給我W.但是,我想避免計算兩次,因爲矩陣ix非常大。Sklearn中的非負矩陣因式分解

如果你能告訴我如何同時得到W和H,那太棒了!下面是我的代碼:

from sklearn.decomposition import ProjectedGradientNMF 
import numpy 
A = numpy.random.uniform(size = [40, 30]) 
nmf_model = ProjectedGradientNMF(n_components = 5, init='random', random_state=0) 
nmf_model.fit(A) 
H = nmf_model.components_.T 
+0

能否再次應用該算法A.T(轉置)真的給W'我無法驗證它。 – svural

回答

18

幸運的是,你可以看看通過源代碼:
https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/decomposition/nmf.py

fit_transform()始於線460,並在線路530這表明H被連接到components_,並返回W從功能。

所以,你不應該有兩次運行這個,你應該只改變:

nmf_model.fit(A); 
H = nmf_model.components_.T; 

W = nmf_model.fit_transform(A); 
H = nmf_model.components_; 
+4

太好了。我認爲sklearn應該清楚地指出這一點。它過分關注特徵提取。 –