kNN com grandes matrizes esparsas em Python

Eu tenho duas grandes matrizes esparsas:

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>

Cerca de 5 GB de RAM no total para carregar. Observe que essas matrizes são ALTAMENTE esparsas (0,0062% ocupadas).

Para cada linha emtestX, Eu quero encontrara Vizinho mais próximo emtrainX e devolver o rótulo correspondente, encontrado emtrainY. trainY é uma lista com o mesmo comprimento quetrainX e tem muitas muitas classes. (Uma classe é composta de 1-5 rótulos separados, cada rótulo é um dos 20.000, mas o número de classes não é relevante para o que estou tentando fazer agora.)

estou usandosklearnO algoritmo KNN para fazer isso:

from sklearn import neighbors

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

Mesmo prevendo 1 item detestX Demora um pouco (ou seja, algo como 30-60 segundos, mas se você multiplicar por 2 milhões, torna-se praticamente impossível). Meu laptop com 16 GB de RAM começa a trocar um pouco, mas consegue completar por 1 item emtestX.

Minhas perguntas são, como posso fazer isso para que termine em tempo razoável? Diga uma noite em uma grande instância do EC2? Teria mais RAM e impedir a troca de velocidade suficiente (acho que não). Talvez eu possa de alguma forma fazer uso da escassez para acelerar o cálculo?

Obrigado.

questionAnswers(4)

yourAnswerToTheQuestion