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 benutzesklearn
KNN-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.