Strojenie hiperparametrów w Pythonie
Alex Scriven
Data Scientist
Bardzo podobnie jak przeszukiwanie siatką:
Jednak zamiast tego losowo wybieramy pola siatki.
Bengio & Bergstra (2012):
Praca ta pokazuje empirycznie i teoretycznie, że losowo wybrane próby są efektywniejsze w optymalizacji hiperparametrów niż przeszukiwanie siatką.
Dwa główne powody:
Przeszukiwanie siatką:

Ile modeli trzeba uruchomić, aby z prawdopodobieństwem 95% trafić w jedno z zielonych pól?
Nasze najlepsze modele:

Jeśli losujemy kombinacje hiperparametrów równomiernie, rozważmy prawdopodobieństwo OMINIĘCIA pożądanego obszaru we wszystkich próbach:
Próba 1: szansa sukcesu 0,05, ominięcia (1-0,05).
Przy n próbach szansa ominięcia pożądanego miejsca we wszystkich wynosi (1-0,05)^n.
Ile prób potrzeba, aby z prawdopodobieństwem 95% trafić w ten obszar?
Co z tego wynika?
Pamiętaj:
Maksimum jest ograniczone przez zdefiniowaną siatkę!
Aby uczciwie porównać metodę z przeszukiwaniem siatką, należy zachować ten sam budżet obliczeniowy.
Można ręcznie utworzyć losową próbę kombinacji hiperparametrów:
# Set some hyperparameter lists
learn_rate_list = np.linspace(0.001,2,150)
min_samples_leaf_list = list(range(1,51))
# Create list of combinations
from itertools import product
combinations_list = [list(x) for x in
product(learn_rate_list, min_samples_leaf_list)]
# Select 100 models from our larger set
random_combinations_index = np.random.choice(
range(0,len(combinations_list)), 100,
replace=False)
combinations_random_chosen = [combinations_list[x] for x in
random_combinations_index]
Zasięg losowego przeszukiwania można zwizualizować, nanosząc wybrane hiperparametry na osie X i Y.

Widoczny jest szeroki zakres rozproszenia, ale bez głębokiego pokrycia.
Strojenie hiperparametrów w Pythonie