kNN mit großen, spärlichen Matrizen in Python

Ich habe zwei große dünne Matrizen:

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>

Insgesamt sind ca. 5 GB RAM zu laden. Beachten Sie, dass diese Matrizen sehr dünn sind (0,0062% belegt).

Für jede Zeile intestX, Ich möchte findendas Nächster Nachbar intrainX und senden Sie das entsprechende Etikett zurücktrainY. trainY ist eine Liste mit der gleichen Länge wietrainX und hat viele, viele Klassen. (Eine Klasse besteht aus 1-5 verschiedenen Labels, jedes Label ist eines von 20.000, aber die Anzahl der Klassen ist nicht relevant für das, was ich gerade versuche.)

ich benutzesklearnKNN-Algorithmus, um dies zu tun:

from sklearn import neighbors

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

Sogar Vorhersage für 1 Artikel vontestX dauert eine Weile (d. h. ungefähr 30-60 Sekunden, aber wenn Sie mit 2 Millionen multiplizieren, wird es so ziemlich unmöglich). Mein Laptop mit 16 GB RAM fängt an, ein bisschen zu tauschen, schafft es jedoch, für 1 Element in zu vervollständigentestX.

Meine Fragen sind, wie kann ich das machen, damit es in angemessener Zeit fertig wird? Sagen Sie eine Nacht auf einer großen EC2-Instanz? Hätte nur mehr RAM und würde das Auslagern nicht beschleunigen (meine Vermutung ist nein). Vielleicht kann ich die Sparsamkeit irgendwie nutzen, um die Berechnung zu beschleunigen?

Vielen Dank.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage