кНН с большими разреженными матрицами в Python

У меня есть две большие разреженные матрицы:

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>

Всего около 5 ГБ ОЗУ для загрузки. Обратите внимание, что эти матрицы очень разрежены (занято 0,0062%).

Для каждого ряда вtestX, Хочу найти Ближайший сосед вtrainX и вернуть соответствующий ярлык, найденный вtrainY. trainY список такой же длины, какtrainX и имеет много много классов. (Класс состоит из 1-5 отдельных меток, каждая метка - одна из 20 000, но количество классов не имеет отношения к тому, что я пытаюсь сделать прямо сейчас.)

Я используюsklearnАлгоритм KNN для этого:

from sklearn import neighbors

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

Даже прогноз на 1 предметtestX занимает какое-то время (то есть примерно 30-60 секунд, но если умножить на 2 миллиона, это станет практически невозможным). Мой ноутбук с 16 ГБ оперативной памяти начинает немного менять местами, но ему удается завершить 1 пункт вtestX.

Мои вопросы: как я могу это сделать, чтобы он закончился в разумные сроки? Скажи одну ночь на большом экземпляре EC2? Было бы просто иметь больше оперативной памяти и предотвратить скорость обмена достаточно (я думаю, нет). Может быть, я могу как-то использовать разреженность, чтобы ускорить расчет?

Спасибо.

Ответы на вопрос(4)

Ваш ответ на вопрос