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?
refit=False
dannclf.fit
nicht mit dem besten Klassifikator fertig bin ?