Momentan arbeite ich mit Python und Scikit, lerne für Klassifizierungszwecke und lese etwas über GridSearch. Ich dachte, dies wäre eine großartige Möglichkeit, meine Schätzparameter zu optimieren, um die besten Ergebnisse zu erzielen.
Meine Methodik ist folgende:
- Teilen Sie meine Daten in Training / Test.
- Verwenden Sie GridSearch mit 5-facher Kreuzvalidierung, um meine Schätzer zu trainieren und zu testen (Random Forest, Gradient Boost, SVC ua), um die besten Schätzer mit der optimalen Kombination von Hyperparametern zu erhalten.
- Ich berechne dann Metriken für jeden meiner Schätzer, wie z. B. Präzision, Rückruf, FMeasure und Matthews-Korrelationskoeffizient, wobei ich meinen Testsatz verwende, um die Klassifizierungen vorherzusagen und sie mit tatsächlichen Klassenbeschriftungen zu vergleichen.
In diesem Stadium sehe ich seltsames Verhalten und bin mir nicht sicher, wie ich vorgehen soll. Nehme ich den .best_estimator_ aus der GridSearch und verwende diesen als "optimale" Ausgabe der Rastersuche und führe eine Vorhersage mit diesem Schätzer durch? Wenn ich das tue, stelle ich fest, dass die Metriken der Stufe 3 normalerweise viel niedriger sind, als wenn ich einfach alle Trainingsdaten trainiere und auf dem Test-Set teste. Oder nehme ich einfach das ausgegebene GridSearchCV-Objekt als neuen Schätzer ? Wenn ich das tue, erhalte ich bessere Ergebnisse für meine Metriken der Stufe 3, aber es scheint seltsam, ein GridSearchCV-Objekt anstelle des beabsichtigten Klassifikators zu verwenden (z. B. eine zufällige Gesamtstruktur) ...
EDIT: Meine Frage ist also, was ist der Unterschied zwischen dem zurückgegebenen GridSearchCV-Objekt und dem Attribut .best_estimator_? Welche davon soll ich zur Berechnung weiterer Kennzahlen verwenden? Kann ich diese Ausgabe wie einen regulären Klassifikator verwenden (z. B. unter Verwendung von Predict) oder wie soll ich sie verwenden?
quelle
refit=False
dannclf.fit
nicht mit dem besten Klassifikator fertig bin ?Mit GridSearchCV können Sie einen Schätzer mit einer Präambel für die Rastersuche kombinieren, um Hyperparameter zu optimieren. Die Methode wählt den optimalen Parameter aus der Rastersuche aus und verwendet ihn mit dem vom Benutzer ausgewählten Schätzer. GridSearchCV erbt die Methoden vom Klassifizierer. Sie können also die Methoden .score, .predict usw. direkt über die GridSearchCV-Schnittstelle verwenden. Wenn Sie die besten durch die Rastersuche identifizierten Hyperparameter extrahieren möchten, können Sie .best_params_ verwenden. Dadurch wird der beste Hyperparameter zurückgegeben. Sie können diesen Hyperparameter dann separat an Ihren Schätzer übergeben.
Die direkte Verwendung von .predict führt zu denselben Ergebnissen wie die Ermittlung des besten Hyperparameters durch .best_param_ und die anschließende Verwendung in Ihrem Modell. Wenn wir die Funktionsweise der Rastersuche verstehen, können wir erkennen, warum dies der Fall ist.
Rastersuche
Diese Technik wird verwendet, um die optimalen Parameter für einen Algorithmus zu finden. Dies sind NICHT die Gewichte oder das Modell, diese werden anhand der Daten gelernt. Dies ist offensichtlich ziemlich verwirrend, so dass ich zwischen diesen Parametern unterscheiden werde, indem ich einen Hyperparameter aufrufe.
Hyperparameter sind wie k in k-Nearest Neighbours (k-NN). Bei k-NN muss der Benutzer auswählen, welcher Nachbar bei der Berechnung der Entfernung berücksichtigt werden soll. Der Algorithmus stimmt dann einen Parameter, einen Schwellenwert, ab, um festzustellen, ob ein neues Beispiel in die erlernte Verteilung fällt. Dies erfolgt mit den Daten.
Wie wählen wir k?
Einige Leute gehen einfach mit Empfehlungen, die auf früheren Studien des Datentyps basieren. Andere verwenden die Rastersuche. Mit dieser Methode können Sie am besten bestimmen, welches k für Ihre Daten optimal ist.
Wie funktioniert es?
Zuerst müssen Sie ein Raster erstellen. Dies ist im Wesentlichen eine Reihe möglicher Werte, die Ihr Hyperparameter annehmen kann. Für unseren Fall können wir . Anschließend trainieren Sie Ihr k-NN-Modell für jeden Wert im Raster. Zuerst machst du 1-NN, dann 2-NN und so weiter. Für jede Iteration erhalten Sie einen Performance-Score, der angibt, wie gut Ihr Algorithmus mit diesem Wert für den Hyper-Parameter abschneidet. Nachdem Sie das gesamte Raster durchlaufen haben, wählen Sie den Wert aus, der die beste Leistung erbracht hat.[ 1 , 2 , 3 , . . . , 10 ]
Dies widerspricht den Grundsätzen, keine Testdaten zu verwenden !!
Du hättest absolut recht. Aus diesem Grund wird die Rastersuche häufig mit der Kreuzvalidierung gemischt. Damit wir die Testdaten vollständig getrennt halten, bis wir mit unseren Ergebnissen wirklich zufrieden sind und bereit zum Testen sind. fachen Kreuzvalidierung wird ein Trainingssatz in Teile aufgeteilt. Anschließend werden Falze trainiert und der ausgelassene Falz getestet. Für jeden Wert im Raster wird der Algorithmus mal neu trainiert , wobei jede Faltung ausgelassen wird. Dann wird die Leistung über jede Falte gemittelt und das ist die erzielte Leistung für diesen Hyperparameterwert.n n - 1 nn n n−1 n
Der ausgewählte Hyperparameterwert ist derjenige, der die höchste durchschnittliche Leistung über die n-Faltungen erzielt. Wenn Sie mit Ihrem Algorithmus zufrieden sind, können Sie ihn auf dem Testset testen. Wenn Sie direkt zum Testset gehen, riskieren Sie eine Überanpassung.
quelle