Batch Gradientenabstieg mit scikit learn (sklearn)

7

Ich spiele mit einem Logistic Regression-Klassifikator, der mit Scikit-Learn (sklearn) arbeitet. Ich habe einen großen Datensatz, der zu langsam ist, um alle auf einmal auszuführen; Außerdem möchte ich die Lernkurve während des Trainings studieren.

Ich möchte den Batch-Gradienten-Abstieg verwenden, um meinen Klassifikator in Chargen von beispielsweise 500 Proben zu trainieren. Gibt es eine Möglichkeit, sklearn zu benutzen, oder sollte ich sklearn ablegen und "meine eigenen rollen"?

Das habe ich bisher:

%Vor%

i.e. Es identifiziert eine Trainingsprobe korrekt (ja, ich weiß, es wäre besser, sie mit neuen Daten zu bewerten - das ist nur ein kurzer Rauchtest).

R.e. Batch-Gradient-Abstieg: Ich bin noch nicht so weit gekommen, Lernkurven zu erstellen, aber kann man einfach fit wiederholt auf nachfolgende Teilmengen der Trainingsdaten anwenden? Oder gibt es eine andere Funktion, um in Batches zu trainieren? Die Dokumentation und Google sind in dieser Angelegenheit ziemlich still. Danke!

    
JohnJ 23.02.2013, 03:13
quelle

1 Antwort

20

Was Sie wollen, ist nicht Batch-Gradienten-Abstieg, sondern stochastischer Gradientenabstieg; Batch-Lernen bedeutet Lernen auf dem gesamten Trainingssatz auf einmal, während das, was Sie beschreiben, als Minibatch-Lernen bezeichnet wird. Dies wird in sklearn.linear_model.SGDClassifier implementiert, was zu einem logistischen Regressionsmodell passt, wenn Sie ihm die Option loss="log" geben.

Mit SGDClassifier , wie mit LogisticRegression , ist es nicht notwendig, den Schätzer in ein OneVsRestClassifier zu packen - beide machen ein "One-vs-All" Training out of the box.

%Vor%

Verwenden Sie dann die Methode partial_fit anstelle von fit , um auf Minibatches zu trainieren. Beim ersten Mal müssen Sie ihm eine Liste von Klassen geben, da nicht alle Klassen in jedem Minibatch vorhanden sein können:

%Vor%

(Hier gebe ich classes für jedes Minibatch, was nicht notwendig ist, aber auch nicht weh tut und den Code kürzer macht.)

    
Fred Foo 23.02.2013, 11:32
quelle