Introductie van grid search

Hyperparameter Tuning in Python

Alex Scriven

Data Scientist

Automatiseren van 2 hyperparameters

Je eerdere werk:

neighbors_list = [3,5,10,20,50,75]
accuracy_list = []
for test_number in neighbors_list:
    model = KNeighborsClassifier(n_neighbors=test_number)
    predictions = model.fit(X_train, y_train).predict(X_test)
    accuracy = accuracy_score(y_test, predictions)
    accuracy_list.append(accuracy)

Dat hebben we samengevoegd in een dataframe voor analyse.

Hyperparameter Tuning in Python

Automatiseren van 2 hyperparameters

 

Wat als we waarden van 2 hyperparameters testen?

Met een GBM-algoritme:

  • learn_rate [0.001, 0.01, 0.05]
  • max_depth [4,6,8,10]

We kunnen een (geneste) for-lus gebruiken!

Hyperparameter Tuning in Python

Automatiseren van 2 hyperparameters

Eerst een modelmaakfunctie:

def gbm_grid_search(learn_rate, max_depth):
    model = GradientBoostingClassifier(
            learning_rate=learn_rate,
            max_depth=max_depth)

predictions = model.fit(X_train, y_train).predict(X_test)
return([learn_rate, max_depth, accuracy_score(y_test, predictions)])
Hyperparameter Tuning in Python

Automatiseren van 2 hyperparameters

 

Nu loopen we door de hyperparameterlijsten en roepen we onze functie aan:

results_list = []

for learn_rate in learn_rate_list:
    for max_depth in max_depth_list:
        results_list.append(gbm_grid_search(learn_rate,max_depth))

Hyperparameter Tuning in Python

Automatiseren van 2 hyperparameters

 

We kunnen deze resultaten ook in een DataFrame zetten en printen:

results_df = pd.DataFrame(results_list, columns=['learning_rate', 'max_depth', 'accuracy'])
print(results_df)

resultatentabel

Hyperparameter Tuning in Python

Hoeveel modellen?

 

Er kwamen veel meer modellen bij door extra hyperparameters en waarden toe te voegen.

  • De relatie is niet lineair maar exponentieel
  • Eén extra waarde voor een hyperparameter is niet slechts één model
  • 5 voor hyperparameter 1 en 10 voor hyperparameter 2 zijn 50 modellen!

Hoe zit het met cross-validatie?

  • 10-voudige cross-validatie maakt 50x10 = 500 modellen!
Hyperparameter Tuning in Python

Van 2 naar N hyperparameters

 

Wat als we meer hyperparameters toevoegen?

We kunnen onze lus nesten!

# Pas de lijst met te testen waarden aan
learn_rate_list = [0.001, 0.01, 0.1, 0.2, 0.3, 0.4, 0.5]
max_depth_list = [4,6,8, 10, 12, 15, 20, 25, 30]
subsample_list = [0.4,0.6, 0.7, 0.8, 0.9]
max_features_list = ['auto', 'sqrt']
Hyperparameter Tuning in Python

Van 2 naar N hyperparameters

Pas onze functie aan:

def gbm_grid_search(learn_rate, max_depth,subsample,max_features):
    model = GradientBoostingClassifier(
        learning_rate=learn_rate, 
        max_depth=max_depth,
        subsample=subsample,
        max_features=max_features)
    predictions = model.fit(X_train, y_train).predict(X_test)
    return([learn_rate, max_depth, accuracy_score(y_test, predictions)])
Hyperparameter Tuning in Python

Van 2 naar N hyperparameters

De for-lus aanpassen (nesten):

for learn_rate in learn_rate_list:
    for max_depth in max_depth_list:
        for subsample in subsample_list:
            for max_features in max_features_list:
                results_list.append(gbm_grid_search(learn_rate,max_depth,
                                     subsample,max_features))
results_df = pd.DataFrame(results_list, columns=['learning_rate',
                         'max_depth', 'subsample', 'max_features','accuracy'])
print(results_df)
Hyperparameter Tuning in Python

Van 2 naar N hyperparameters

 

Hoeveel modellen nu?

  • 7x9x5x2 = 630 (6.300 met cross-validatie!)

We kunnen niet eindeloos nesten!

En wat als we willen:

  • Details over traintijden en scores
  • Details over cross-validatiescores
Hyperparameter Tuning in Python

Introductie van grid search

Laten we een grid maken:

  • Links alle waarden van max_depth
  • Bovenaan alle waarden van learning_rate

Tabel met hyperparametercombinaties

Hyperparameter Tuning in Python

Introductie van grid search

Werk cel voor cel door het grid:

tabel met hyperparametercombinaties

(4,0.001) komt overeen met deze estimator:

GradientBoostingClassifier(max_depth=4, learning_rate=0.001)
Hyperparameter Tuning in Python

Grid search: voor- en nadelen

 

Enkele voordelen van deze aanpak:

Voordelen:

  • Je hoeft geen duizenden regels code te schrijven
  • Vindt het beste model binnen het grid (*let op!)
  • Makkelijk uit te leggen
Hyperparameter Tuning in Python

Grid search: voor- en nadelen

 

Enkele nadelen van deze aanpak:

  • Rekenintensief! We maakten zo 6.000+ modellen.
  • Het is ‘ongeïnformeerd’: de uitkomst van één model helpt het volgende niet.

 

We behandelen later ‘geïnformeerde’ methoden!

Hyperparameter Tuning in Python

Laten we oefenen!

Hyperparameter Tuning in Python

Preparing Video For Download...