kNN z dużymi rzadkimi macierzami w Pythonie

Mam dwie duże macierze rzadkie:

In [3]: trainX
Out[3]: 
<6034195x755258 sparse matrix of type '<type 'numpy.float64'>'
        with 286674296 stored elements in Compressed Sparse Row format>

In [4]: testX
Out[4]: 
<2013337x755258 sparse matrix of type '<type 'numpy.float64'>'
        with 95423596 stored elements in Compressed Sparse Row format>

Łącznie około 5 GB pamięci RAM. Zauważ, że te macierze są WYSOKIE rzadkie (0,0062% zajęte).

Dla każdego rzędu wtestX, Chcę znaleźć Najbliższy sąsiad wtrainX i zwróć odpowiednią etykietę, znalezioną wtrainY. trainY to lista o tej samej długości cotrainX i ma wiele wielu klas. (Klasa składa się z 1-5 oddzielnych etykiet, każda etykieta to jedna z 20 000, ale liczba klas nie ma znaczenia dla tego, co próbuję teraz zrobić).

ja używamsklearnalgorytm KNN:

from sklearn import neighbors

clf = neighbors.KNeighborsClassifier(n_neighbors=1)
clf.fit(trainX, trainY)
clf.predict(testX[0])

Nawet przewidywanie 1 przedmiotutestX zajmuje trochę czasu (tj. około 30-60 sekund, ale jeśli pomnożysz przez 2 miliony, stanie się to prawie niemożliwe). Mój laptop z 16 GB pamięci RAM zaczyna się nieco wymieniać, ale udaje mu się ukończyć za 1 elementtestX.

Moje pytania brzmią: jak mogę to zrobić, aby zakończyło się w rozsądnym czasie? Powiedz jedną noc na dużej instancji EC2? Czy posiadanie większej ilości pamięci RAM i uniemożliwianie wymiany przyspieszy to wystarczająco szybko (domyślam się, że nie). Może mogę w jakiś sposób wykorzystać rzadkość, aby przyspieszyć obliczenia?

Dziękuję Ci.

questionAnswers(4)

yourAnswerToTheQuestion