Představení Grid Search

Hyperparameter Tuning in Python

Alex Scriven

Data Scientist

Automatizace 2 hyperparametrů

Vaše předchozí práce:

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)

Výsledky jsme pak shromáždili v datovém rámci pro analýzu.

Hyperparameter Tuning in Python

Automatizace 2 hyperparametrů

 

Co testování hodnot 2 hyperparametrů?

Použijeme algoritmus GBM:

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

Můžeme použít (vnořenou) smyčku for!

Hyperparameter Tuning in Python

Automatizace 2 hyperparametrů

Nejprve funkce pro vytvoření modelu:

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

Automatizace 2 hyperparametrů

 

Nyní procházíme seznamy hyperparametrů a voláme funkci:

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

Automatizace 2 hyperparametrů

 

Výsledky můžeme také vložit do DataFrame a vypsat:

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

tabulka výsledků

Hyperparameter Tuning in Python

Kolik modelů?

 

Přidáním více hyperparametrů a hodnot vzniká mnohem více modelů.

  • Vztah není lineární, ale exponenciální
  • Jedna další hodnota hyperparametru není jen jeden model
  • 5 hodnot pro Hyperparametr 1 a 10 pro Hyperparametr 2 = 50 modelů!

Co křížová validace?

  • 10násobná křížová validace by vytvořila 50×10 = 500 modelů!
Hyperparameter Tuning in Python

Od 2 k N hyperparametrům

 

Co přidat více hyperparametrů?

Můžeme vnořit smyčky!

# Adjust the list of values to test
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

Od 2 k N hyperparametrům

Upravíme funkci:

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

Od 2 k N hyperparametrům

Úprava smyčky (vnoření):

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

Od 2 k N hyperparametrům

 

Kolik modelů teď?

  • 7×9×5×2 = 630 (6 300 s křížovou validací!)

Vnořovat donekonečna nelze!

A co kdybychom chtěli:

  • Detaily o době trénování a skóre
  • Detaily o skóre křížové validace
Hyperparameter Tuning in Python

Představení Grid Search

Vytvoříme mřížku:

  • Vlevo dolů všechny hodnoty max_depth
  • Nahoře napříč všechny hodnoty learning_rate

Tabulka kombinací hyperparametrů

Hyperparameter Tuning in Python

Představení Grid Search

Procházíme každou buňku mřížky:

Tabulka kombinací hyperparametrů

(4, 0.001) odpovídá vytvoření estimátoru takto:

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

Grid Search – výhody a nevýhody

 

Některé výhody tohoto přístupu:

Výhody:

  • Není třeba psát tisíce řádků kódu
  • Nalezne nejlepší model v mřížce (*s poznámkou!)
  • Snadno vysvětlitelný
Hyperparameter Tuning in Python

Grid Search – výhody a nevýhody

 

Některé nevýhody tohoto přístupu:

  • Výpočetně náročný! Vzpomeňte, jak rychle vzniklo 6 000+ modelů?
  • Je „neinformovaný". Výsledky jednoho modelu neovlivňují tvorbu dalšího.

 

„Informované" metody probereme později!

Hyperparameter Tuning in Python

Pojďme si procvičit!

Hyperparameter Tuning in Python

Preparing Video For Download...