2012-04-21 12 views
5

mam rzadki macierz RWykonaj nieujemną faktoryzacji macierzy w R

chciałbym teraz wykonać nieujemną faktoryzacji macierzy na R

dane.txt jest plikiem tekstowym stworzyłem przy użyciu Pythona, składa się z 3 kolumny, w których pierwsza kolumna określa liczbę rzędów, drugą liczbę kolumn i trzecią wartość

data.txt

1 5 10 
3 2 5 
4 6 9 

oryginalny dane.txt zawiera 1.640 09 wierszy, które to dane dla 250000x250000 rozrzedzony matrycy

użyłem biblioteki NMF i robie

>x=scan('data.txt',what=list(integer(),integer(),numeric())) 
>library('Matrix') 
>R=sparseMatrix(i=x[[1]],j=x[[2]],x=x[[3]]) 

>res<-nmf(R,3) 

to daje mi błąd Błąd w funkcji (klas, FDEF, mtable): stanie znaleźć dziedziczną metoda funkcji NMF, do podpisu „dgCMAtrix”, „brakuje”, „brakuje”

może ktoś mi pomóc dowiedzieć się, co robię źle

+0

Dlaczego -1 powód ??? – user1344389

+0

Podaj kod, aby zbudować przykładową macierz rozproszoną i (działający) kod, aby uruchomić przykład. Czy naprawdę masz na myśli -> tam, czy powinno to być <-? –

+0

Pytanie pod redakcją przepraszam moje złe – user1344389

Odpowiedz

3

pierwszy p Roblem jest to, że dostarczasz dgCatrix do nmf.

> class(R) 
[1] "dgCMatrix" 
attr(,"package") 
[1] "Matrix" 

Pomoc jest tutaj:

help(nmf) 

Zobacz sekcję metod. Chce prawdziwej matrycy. Wymuszanie z as.matrix prawdopodobnie nie przyniesie Ci wiele korzyści z powodu liczby wpisów.

Teraz nawet z przykładowych danych, przymus do matrycy jest niewystarczająca, jak napisano:

> nmf(as.matrix(R)) 
Error: NMF::nmf : when argument 'rank' is not provided, argument 'seed' is required to inherit from class 'NMF'. See ?nmf. 

Dajmy mu rangę:

> nmf(as.matrix(R),2) 
Error in .local(x, rank, method, ...) : 
    Input matrix x contains at least one null row. 

I rzeczywiście to robi:

> R 
4 x 6 sparse Matrix of class "dgCMatrix" 

[1,] . . . . 10 . 
[2,] . . . . . . 
[3,] . . 5 . . . 
[4,] . . . . . 9 
+0

w porządku, więc jakie jest rozwiązanie? Czy mówisz, że to niemożliwe? – user1344389

+1

Twoje oryginalne dane, przedstawione jako macierz, mogą rzeczywiście być tym, czego potrzebujesz (ale w pytaniu nie określono żadnej pozycji). Niestety, taka matryca prawdopodobnie nie pasuje do twojej pamięci. –

+1

ok, więc jeśli twoja odpowiedź nie jest odpowiedzią, możesz ją usunąć, aby inni nie zrozumieli tego za odpowiedź: – user1344389