kNN con grandes matrices dispersas en Python

Tengo dos grandes matrices dispersas:

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>

Alrededor de 5 GB de RAM en total para cargar. Tenga en cuenta que estas matrices son ALTAMENTE dispersas (0,0062% de ocupación).

Para cada fila entestX, Yo quiero encontrarla Vecino más cercano entrainX y devolver su etiqueta correspondiente, encontrada entrainY. trainY es una lista con la misma longitud quetrainX y tiene muchas clases. (Una clase está formada por 1-5 etiquetas separadas, cada etiqueta es una de 20,000, pero el número de clases no es relevante para lo que estoy tratando de hacer ahora).

estoy usandosklearnEl algoritmo KNN para hacer esto:

from sklearn import neighbors

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

Incluso prediciendo para 1 ítem detestX toma un tiempo (es decir, algo así como 30-60 segundos, pero si se multiplica por 2 millones, se vuelve prácticamente imposible). Mi computadora portátil con 16 GB de RAM comienza a intercambiarse un poco, pero logra completarse por 1 elemento entestX.

Mi pregunta es, ¿cómo puedo hacer esto para que termine en un tiempo razonable? ¿Decir una noche en una gran instancia de EC2? Si tuviera más memoria RAM y evitar que el intercambio lo acelerara lo suficiente (supongo que no). ¿Tal vez pueda hacer uso de la escasez para acelerar el cálculo?

Gracias.

Respuestas a la pregunta(4)

Su respuesta a la pregunta