2017-12-19 8 views
0

Ich habe einen Datensatz, der viel zu groß ist, um in den Speicher zu passen, also muss ich Modelle in Batches trainieren. Ich habe mein Modell in ein GridSearchCV, ein RandomisedSearchCV oder ein BayesSearchCV (von scikit-optimize) eingepackt und sehe, dass ich nicht mehrere Instanzen davon in verschiedenen Teilen meines riesigen Datasets trainieren kann und erwarte, dass die besten von jedem gefundenen Hyperparameter übereinstimmen.Wie kann ich sklearns GridSearchCV mit Daten verwenden, die nicht in den Speicher passen?

Ich habe überlegt, meine Schätzer in einen BatchVoter (meines eigenen Designs) zu integrieren, der das Lesen aus der Datenbank in Stapeln verwaltet und eine Liste von Modellen führt. Dies an den XSeachCV zu übergeben und das Parameter-Space-Dictionary so zu aktualisieren, dass alle Schlüssel mit 'estimator__' führen, kann die Suche anweisen, die Parameter des Unterobjekts zu setzen, aber es gibt immer noch ein Problem: Eine Suche wird mit einem Aufruf an die .fit() - Methode, die Daten aufnehmen muss.

Gibt es eine clevere Möglichkeit, die native GridSearchCV mit Daten zu verwenden, die zu groß sind, um sie an die .fit() - Methode zu übergeben?

Antwort

0

Versuchen Sie dask. Es unterstützt Datenrahmen, Arrays und Sammlungen. Es besteht aus einem Scheduler und Arbeitern. Es hat auch einen distributed Scheduler, der es ermöglicht, Datenrahmen auf mehreren PCs zu verarbeiten.

Here ist die Beschreibung zur Parallelisierung von Modellen.

Here ist der Link zu einem vollständigen Modul, das ein Drop-in-Ersatz von GridSearchCV

+0

könnte ich nicht signifikant alle verschiedenen Pakete ohne Verzögerung dieses Projektes verwenden kann. Neue Pakete müssen genehmigt werden, und dann muss ich alles über mein neues Design neu gestalten. Unsere Datenbank basiert auf numpy memmaps, die wahnsinnig schnell sind und gut für uns arbeiten, und dask macht keine Bayes'sche Optimierung, was der Punkt ist, den ich gerade umgestalte. Das Verteilen auf mehrere Kerne ist jetzt gut genug, und n_jobs = X macht das leicht. Aber ich werde an zukünftige Arbeiten denken. – pvlkmrv

+0

Ich bin mir nicht einmal sicher, dass dask das grundlegende Batching-Problem lösen könnte: Wenn ein Lerner alle Daten auf einmal sehen muss, dann muss entweder alles auf den Speicher passen oder ich muss eine Menge Seiten verursachen Fehler bei der Suche nach einer Speicherabbilddatei auf der Festplatte, die langsam ist. In meinem Problem machen wir tatsächlich eine Verbindung von ein paar der Datenbanktabellen zur Lesezeit, so dass die hundert GB auf der Festplatte zu TB für das Training explodiert. – pvlkmrv

Verwandte Themen