2011-07-25 8 views
7

Zastanawiam się tylko, czy ktoś tam wie o implementacji rozkładu wartości osobliwej (SVD) w Javie dla dużych, rzadkich macierzy? Potrzebuję tej implementacji do ukrytej analizy semantycznej (LSA).Implementacja Java rozkładu pojedynczej wartości dla dużych rzadkich macierzy

Próbowałem pakietów z UJMP i JAMA, ale dławią się, gdy liczba wierszy> = 1000 i col> = 500. Jeśli ktoś może wskazać mi psuedocode lub coś tam, byłoby to bardzo doceniane.

+2

Odpowiedź w [innym pytaniu] (http://stackoverflow.com/questions/1750463/singular-value-discomposition-implementation), która była prawie taka sama, była próba [Colt] (http: //acs.lbl .gov/~ hoschek/colt /). –

+0

Cóż, kod dla klasy SingularValueDecomposition w obu Colt i JAMA są prawie identyczne. co więcej, kod działa tylko wtedy, gdy m> n (liczba wierszy jest większa niż liczba kolumn). także, myślę, że algorytmy nie są zoptymalizowane dla rzadkich macierzy. – jake

+0

Stan m> n nie przeszkadza mi. w rzeczywistości dla mnie 99,99% czasu, m> n, zawsze będzie miało miejsce (wiersze reprezentują słowa i cols oznaczają dokumenty). po prostu to ograniczenie nie jest jasno udokumentowane. – jake

Odpowiedz

3

Istnieje list of Java numerical libraries at Wikipedia. Biblioteka NIST, która jest dość dobra, niestety nie zajmuje się rzadkimi macierzami. Nie jestem zbyt zaznajomiony z innymi pakietami. Możesz rzucić okiem na Colt; jest również dość wysokiej jakości i obsługuje rzadkie matryce dla niektórych operacji; Nie wiem o SVD, chociaż wyobrażam sobie, że tak. Słyszałem też, że warto też spojrzeć na to: UJMP.

EDYCJA: Przykro nam, że UJMP nie radzi sobie z twoim problemem. Słyszałem, że warto było zobaczyć.

+0

dzięki. ta lista pomogła. jeśli ktokolwiek jest zainteresowany, pakiet apache matematycznych apache ma implementację SVD. iteruje tylko 30 razy i zgłasza wyjątek. zagłębiając się nieco głębiej w kod, nie jest oczywiste, jak to zwiększyć (ponieważ istnieją klasy w obrębie klas w ramach klas). – jake