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ć?
źródło
refit=False
toclf.fit
czy nie skończę z najlepszym klasyfikatorem?GridSearchCV pozwala łączyć estymator z preambułą wyszukiwania siatki w celu dostrojenia hiperparametrów. Metoda wybiera optymalny parametr z wyszukiwania siatki i używa go z estymatorem wybranym przez użytkownika. GridSearchCV dziedziczy metody z klasyfikatora, więc tak, możesz użyć metod .score, .predict itp. Bezpośrednio przez interfejs GridSearchCV. Jeśli chcesz wyodrębnić najlepsze hiperparametry zidentyfikowane przez wyszukiwanie siatki, możesz użyć .best_params_, a to zwróci najlepszy hiperparametr. Następnie możesz przekazać ten hiperparametr do estymatora osobno.
Bezpośrednie użycie .predict da takie same wyniki, jak uzyskanie najlepszego hiperparametru poprzez .best_param_, a następnie użycie go w swoim modelu. Rozumiejąc podstawowe działania wyszukiwania siatki, możemy zrozumieć, dlaczego tak jest.
Wyszukiwanie w siatce
Ta technika służy do znalezienia optymalnych parametrów do użycia z algorytmem. To NIE są wagi ani model, które uczy się na podstawie danych. Jest to oczywiście dość mylące, więc rozróżnię te parametry, wywołując jeden hiper-parametr.
Hiperparametry są jak k w k-Najbliższych sąsiadów (k-NN). k-NN wymaga od użytkownika wyboru, który sąsiad ma wziąć pod uwagę przy obliczaniu odległości. Algorytm następnie dostraja parametr, próg, aby sprawdzić, czy nowy przykład mieści się w wyuczonym rozkładzie, odbywa się to z danymi.
Jak wybieramy k?
Niektóre osoby po prostu stosują zalecenia oparte na wcześniejszych badaniach typu danych. Inni używają wyszukiwania siatki. Ta metoda będzie w stanie najlepiej określić, które k jest optymalne do wykorzystania dla danych.
Jak to działa?
Jest to sprzeczne z zasadami nieużywania danych testowych !!
Wybrana wartość hiperparametru jest tą, która osiąga najwyższą średnią wydajność wśród n-krotności. Gdy jesteś zadowolony ze swojego algorytmu, możesz go przetestować na zestawie testowym. Jeśli przejdziesz bezpośrednio do zestawu testowego, ryzykujesz przeregulowanie.
źródło