2015-04-15 9 views
6

Sto usando un codice attualmente assegnato a http://www.quuxlabs.com/blogEsempio di scomposizione della matrice sklearn

Dà un buon risultato. E posso vedere chiaramente quali cambiamenti nella matrice sono avvenuti.

Inoltre, ho provato a utilizzare la libreria sklearn a sklearn.decomposition.NMF Ma i risultati ottenuti con lo stesso input non sono abbastanza buoni. Forse mi manca qualcosa.

Ecco il mio codice di esempio -

from sklearn.decomposition import NMF , ProjectedGradientNMF 
R = [ 
    [5,3,0,1], 
    [4,0,0,1], 
    [1,1,0,5], 
    [1,0,0,4], 
    [0,1,5,4], 
    ] 
R = numpy.array(R) 
nmf = NMF(beta=0.001, eta=0.0001, init='random', max_iter=2000,nls_max_iter=20000, random_state=0, sparseness=None,tol=0.001) 
nR = nmf.fit_transform(R) 
print nR 
print 
print nmf.reconstruction_err_ 
print 

Non sta mantenendo in uscita/valori inseriti nella matrice come posso vedere utilizzando il codice menzionato nel blog.

Qualcuno può aiutarmi a capire!

risposta

14

Hmmm ... molto stupido di me !!! Ho passato attraverso nmf.py e ho scoperto che fit_tranform restituisce solo W e nmf.component_ ottenere il valore del prodotto H. Dot di chi dà nuova R.

from sklearn.decomposition import NMF , ProjectedGradientNMF 
R = [ 
    [5,3,0,1], 
    [4,0,0,1], 
    [1,1,0,5], 
    [1,0,0,4], 
    [0,1,5,4], 
    ] 
R = numpy.array(R) 
nmf = NMF() 
W = nmf.fit_transform(R); 
H = nmf.components_; 
nR = numpy.dot(W,H) 
print nR 
+0

non siete stupidi. La documentazione non è buona se dobbiamo leggere la fonte. (inoltre dovremmo sempre leggere il codice e capire come funziona piuttosto che trattarlo come una scatola nera) –

+1

Questa sembra essere una vecchia risposta. Hai notato che i risultati del codice http://www.quuxlabs.com/blog e sklearn sono diversi per i valori 0? – futurenext110