2015-04-15 17 views
6

Używam kodu aktualnie podanego na http://www.quuxlabs.com/blogPrzykład faktoryzacji macierzy sklearn przykład

Daje dobry wynik. I widzę wyraźnie, jakie zmiany w matrycy się wydarzyły.

Próbowałem również użyć biblioteki sklearn pod adresem sklearn.decomposition.NMF Ale wyniki, które otrzymałem z tym samym wpisem, nie są wystarczająco dobre. Może coś mi brakuje.

Oto mój przykładowy kod -

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 

Nie jest utrzymanie wyjściu/wypełnionych wartości w macierzy jak widzę przy użyciu kodu podanego w blogu.

Czy ktoś może mi pomóc zrozumieć!

Odpowiedz

14

Hmmm ... bardzo głupi mnie !!! I przeszedł nmf.py i okazało się, że fit_tranform zwraca tylko biała i nmf.component_ uzyskać wartość produktu H. Dot tych daje nowy 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

nie jesteś głupi. Dokumentacja nie jest dobra, jeśli musimy przeczytać źródło. (poza tym powinniśmy zawsze czytać kod i rozumieć, jak działa, a nie traktować go jak czarną skrzynkę). –

+1

To wydaje się być stara odpowiedź. Czy zauważyłeś, że wyniki kodu http://www.quuxlabs.com/blog i sklearn są różne dla wartości 0? – futurenext110