Batch gradient descent mit scikit lernen (sklearn)
Ich hab das Spiel mit einer one-vs-all Logistische Regression Klassifizierer mit Scikit-Learn (sklearn). Ich habe ein großes dataset, das ist zu langsam, alle auf einmal; auch ich möchte Studie der Lernkurve, wie die Ausbildung dauert.
Ich möchte mit batch gradient descent zu trainieren, meine Klassifizierer in Chargen von, sagen wir, 500 Proben. Gibt es eine Möglichkeit der Verwendung von sklearn um dies zu tun, oder sollte ich aufgeben sklearn und "roll meine eigene"?
Dies ist, was ich habe, so weit:
from sklearn.linear_model import LogisticRegression
from sklearn.multiclass import OneVsRestClassifier
# xs are subsets of my training data, ys are ground truth for same; I have more
# data available for further training and cross-validation:
xs.shape, ys.shape
# => ((500, 784), (500))
lr = OneVsRestClassifier(LogisticRegression())
lr.fit(xs, ys)
lr.predict(xs[0,:])
# => [ 1.]
ys[0]
# => 1.0
I. e. er erkennt richtig eine Trainings-Stichprobe (ja, ich weiß, es wäre besser, bewerten es mit neuen Daten-dies ist nur eine schnelle Rauch-test).
R. e. batch gradient descent: ich habe nicht bekommen, so weit wie das erstellen von Lernkurven, aber kann man einfach laufen fit
wiederholt auf den nachfolgenden Teilmengen der Trainingsdaten? Oder gibt es eine andere Funktion zu trainieren, die in batches? Die Dokumentation und Google sind ziemlich stumm über die Angelegenheit. Danke!
- Ihre beste Wette vielleicht einen Blick in den source-code dieser Bibliothek.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie wollen, ist nicht batch gradient descent, aber stochastic gradient descent; batch-lernen bedeutet zu lernen, auf die gesamte Trainings-set in einem Rutsch, während das, was Sie beschreiben, ist richtig genannt minibatch lernen. Das ist umgesetzt in
sklearn.linear_model.SGDClassifier
, die für ein logistisches Regressionsmodell, wenn man ihm die optionloss="log"
.Mit
SGDClassifier
wie mitLogisticRegression
, es gibt keine Notwendigkeit, wickeln Sie die Schätzer in einerOneVsRestClassifier
- beide tun one-vs-all-training aus der box.Dann Zug nach minibatches, verwenden Sie die
partial_fit
Methode stattfit
. Das erste mal, Sie haben zu füttern, eine Liste von Klassen, da nicht alle Klassen dürfen in jeder minibatch:(Hier bin ich vorbei
classes
für jeden minibatch, das ist nicht notwendig, aber tut nicht weh und macht den code kürzer.)SGDClassifier
unterstützt multi-label-Klassifizierung? Die docs stackoverflow.com/questions/20335853/... sagen, dass es das Gegenteil