Attualmente sto lavorando con Python e Scikit per imparare a fini di classificazione, e facendo alcune letture su GridSearch ho pensato che questo fosse un ottimo modo per ottimizzare i miei parametri di stima per ottenere i migliori risultati.
La mia metodologia è questa:
- Dividi i miei dati in allenamento / test.
- Usa GridSearch con validazione 5Fold Cross per addestrare e testare i miei stimatori (Random Forest, Gradient Boost, SVC tra gli altri) per ottenere i migliori stimatori con la combinazione ottimale di iper parametri.
- Calcolo quindi le metriche su ciascuno dei miei stimatori come Precisione, Richiamo, FMeasure e Coefficiente di correlazione di Matthews, usando il mio set di test per prevedere le classificazioni e confrontarle con le etichette delle classi effettive.
È a questo punto che vedo comportamenti strani e non sono sicuro di come procedere. Prendo il .best_estimator_ da GridSearch e lo utilizzo come output "ottimale" dalla ricerca della griglia ed eseguo una previsione utilizzando questo stimatore? Se lo faccio, trovo che le metriche della fase 3 sono in genere molto più basse rispetto a quando mi alleno semplicemente su tutti i dati di allenamento e collaudo sul set di test. Oppure, prendo semplicemente l'oggetto GridSearchCV di output come nuovo stimatore ? Se lo faccio ottengo punteggi migliori per le mie metriche dello stage 3, ma sembra strano usare un oggetto GridSearchCV invece del classificatore previsto (ad esempio una foresta casuale) ...
EDIT: Quindi la mia domanda è qual è la differenza tra l'oggetto GridSearchCV restituito e l'attributo .best_estimator_? Quale di questi dovrei usare per calcolare ulteriori parametri? Posso usare questo output come un normale classificatore (ad es. Usando predict), oppure come dovrei usarlo?
refit=False
quindiclf.fit
non sarà presente con i migliori classificatore?