Ich schreibe einen maschinellen Lernalgorithmus auf riesigen & spärlichen Daten (meine Matrix ist von Form (347, 5 416 812 801) aber sehr spärlich, nur 0,13% der Daten ist nicht NullSparse-Matrix-Slicing mit Liste von Int
.Meine spärlichen Größe der Matrix ist 105 000 Bytes (< 1Mbytes) und ist von csr
Art.
ich durch die Wahl einer Liste von Beispielen Indizes für jeweils separaten Zug/Test-Sets bin versucht. ich so Ich möchte meinen Datensatz in zwei Teile unterteilen:
training_set = matrix[train_indices]
der Form (len(training_indices), 5 416 812 801)
, spärlich noch
testing_set = matrix[test_indices]
der Form (347-len(training_indices), 5 416 812 801)
auch spärlich
Mit training_indices
und testing_indices
zwei list
von int
Aber training_set = matrix[train_indices]
scheint zum Scheitern verurteilt und gibt ein Segmentation fault (core dumped)
Es ist möglicherweise kein Speicherproblem , wie ich diesen Code auf einem Server mit 64 GB RAM ausführen.
Irgendwelche Hinweise darauf, was die Ursache sein könnte?
Meine Vermutung ist ein MemoryError, der nicht gut gefangen ist. Möglicherweise müssen Sie "Matrix .__ getitem__" (die Indizierungsmethode) untersuchen, um zu sehen, wie die Auswahl erfolgt. Jedes Sparse-Format führt seine eigene Indexierung durch. 'lil' und' csr' sollten Zeilenindex gut behandeln. 'coo' behandelt Index überhaupt nicht. Das Indizieren von dünn besetzten Matrizen ist im kompilierten Code nicht versteckt wie für Arrays (und nicht so schnell). – hpaulj
Ich überprüfe das, aber da ich 'csr' verwende und versuche, Zeilen zu holen, sollte es in Ordnung sein. – Doob
Welche Version von scipy benutzt du? Sie können dies mit 'import scipy; print (scipy .__ version __) ' –