Strojenie hiperparametrów w Pythonie
Alex Scriven
Data Scientist
Dotychczas stosowane metody to wyszukiwanie nieświadome:
Wyszukiwanie nieświadome: każda iteracja strojenia hiperparametrów nie korzysta z poprzednich iteracji.
To umożliwia równoległość obliczeń – choć nie brzmi zbyt efektywnie?
Dotychczasowy proces:

Alternatywne podejście:

Podstawowa metodologia wyszukiwania świadomego:
Zacznij od przybliżonego, losowego podejścia i stopniowo zawężaj przeszukiwanie.
Proces:
Krok (3) można zastąpić kolejnymi losowymi przeszukiwaniami przed przeszukiwaniem siatkowym.
Strojenie od ogółu do szczegółu ma kilka zalet:
Nie warto tracić czasu na przestrzenie hiperparametrów, które nie dają dobrych wyników!
Uwaga: Metoda ta nie opiera się na jednym modelu, lecz na partiach modeli
Przykład z następującymi zakresami hiperparametrów:
max_depth_list od 1 do 65min_sample_list od 3 do 17learn_rate_list 150 wartości od 0,01 do 150Ile możliwych modeli mamy?
combinations_list = [list(x) for x in product(max_depth_list, min_sample_list, learn_rate_list)]
print(len(combinations_list))
134400
Wykonujemy losowe przeszukiwanie na 500 kombinacjach.
Wykres wyników dokładności:

Które modele były najlepsze?
Najlepsze wyniki:
| max_depth | min_samples_leaf | learn_rate | accuracy |
|---|---|---|---|
| 10 | 7 | 0.01 | 96 |
| 19 | 7 | 0.023355705 | 96 |
| 30 | 6 | 1.038389262 | 93 |
| 27 | 7 | 1.11852349 | 91 |
| 16 | 7 | 0.597651007 | 91 |
Wizualizacja wartości max_depth względem dokładności:

min_samples_leaf lepszy poniżej 8

learn_rate gorszy powyżej 1,3

Wnioski z pierwszej iteracji:
max_depth od 8 do 30learn_rate poniżej 1,3min_samples_leaf prawdopodobnie poniżej 8Co dalej? Kolejne losowe lub siatkowe przeszukiwanie z uwzględnieniem tych wniosków!
Uwaga: Była to analiza dwuwymiarowa. Można analizować wiele hiperparametrów (3, 4 lub więcej!) na jednym wykresie, lecz wykracza to poza zakres tego kursu.
Strojenie hiperparametrów w Pythonie