Obecnie pracuję z Python i Scikit uczyć się do celów klasyfikacji i czytając GridSearch, pomyślałem, że to świetny sposób na optymalizację parametrów estymatora, aby uzyskać najlepsze wyniki.
Moja metodologia jest następująca:
- Podziel moje dane na szkolenie / test.
- Użyj GridSearch z 5-krotną weryfikacją krzyżową, aby trenować i testować moje estymatory (między innymi Random Forest, Gradient Boost, SVC), aby uzyskać najlepsze estymatory z optymalną kombinacją hiper parametrów.
- Następnie obliczam metryki dla każdego z moich estymatorów, takich jak Precyzja, Przywołanie, FMeasure i Współczynnik korelacji Matthewsa, używając mojego zestawu testów do przewidywania klasyfikacji i porównywania ich z rzeczywistymi etykietami klas.
Na tym etapie widzę dziwne zachowanie i nie jestem pewien, jak postępować. Czy pobieram .best_estimator_ z GridSearch i używam go jako „optymalnego” wyniku wyszukiwania sieci i wykonuję prognozy za pomocą tego estymatora? Jeśli to zrobię, stwierdzę, że metryki etapu 3 są zwykle znacznie niższe niż wtedy, gdy po prostu trenuję na wszystkich danych treningowych i testuję na zestawie testowym. Czy też po prostu biorę wyjściowy obiekt GridSearchCV jako nowy estymator ? Jeśli to zrobię, otrzymam lepsze wyniki dla moich metryk etapu 3, ale wydaje mi się dziwne używanie obiektu GridSearchCV zamiast zamierzonego klasyfikatora (np. Losowy las) ...
EDYCJA: Więc moje pytanie brzmi, jaka jest różnica między zwróconym obiektem GridSearchCV a atrybutem .best_estimator_? Którego z nich należy użyć do obliczenia dalszych danych? Czy mogę użyć tego wyniku jak zwykłego klasyfikatora (np. Używając przewidywania), czy też jak go użyć?
refit=False
toclf.fit
czy nie skończę z najlepszym klasyfikatorem?