Grid Search se Scikit-Learn

Hyperparameter Tuning in Python

Alex Scriven

Data Scientist

Objekt GridSearchCV

 

Objekt GridSearchCV:

sklearn.model_selection.GridSearchCV(
    estimator,
    param_grid, scoring=None, fit_params=None,
    n_jobs=None, refit=True, cv='warn',
    verbose=0, pre_dispatch='2*n_jobs',
    error_score='raise-deprecating',
    return_train_score='warn')
Hyperparameter Tuning in Python

Kroky Grid Search

 

Kroky Grid Search:

  1. Algoritmus pro ladění hyperparametrů (někdy nazývaný „estimátor")
  2. Určení hyperparametrů, které budeme ladit
  3. Definování rozsahu hodnot pro každý hyperparametr
  4. Nastavení schématu křížové validace a
  5. Definování skórovací funkce pro určení nejlepšího bodu na mřížce.
  6. Doplnění dalších užitečných informací nebo funkcí
Hyperparameter Tuning in Python

Vstupy objektu GridSearchCV

Důležité vstupy jsou:

  • estimator
  • param_grid
  • cv
  • scoring
  • refit
  • n_jobs
  • return_train_score
Hyperparameter Tuning in Python

GridSearchCV 'estimator'

 

Vstup estimator:

  • V podstatě náš algoritmus
  • Již jste pracovali s KNN, Random Forest, GBM a logistickou regresí

 

Pozor:

  • Na jeden objekt GridSearchCV připadá pouze jeden estimátor
Hyperparameter Tuning in Python

GridSearchCV 'param_grid'

Vstup param_grid:

  • Určuje, které hyperparametry a hodnoty se mají testovat

Místo seznamů:

max_depth_list = [2, 4, 6, 8]
min_samples_leaf_list = [1, 2, 4, 6]

Použijte:

param_grid = {'max_depth': [2, 4, 6, 8],
              'min_samples_leaf': [1, 2, 4, 6]}
Hyperparameter Tuning in Python

GridSearchCV 'param_grid'

Vstup param_grid:

Pozor: Klíče ve slovníku param_grid musí být platné hyperparametry.

Například pro estimátor logistické regrese:

# Incorrect
param_grid = {'C': [0.1,0.2,0.5],
              'best_choice': [10,20,50]}
ValueError: Invalid parameter best_choice for estimator LogisticRegression
Hyperparameter Tuning in Python

GridSearchCV 'cv'

Vstup cv:

  • Způsob provedení křížové validace
  • Celé číslo provede k-fold křížovou validaci; standardně se používá 5 nebo 10

k-fold wikipedia

Hyperparameter Tuning in Python

GridSearchCV 'scoring'

 

Vstup scoring:

  • Metrika pro výběr nejlepšího modelu
  • Použijte vlastní metriku nebo modul metrics ze Scikit-Learn

Všechny vestavěné funkce pro hodnocení lze zobrazit takto:

from sklearn import metrics
sorted(metrics.SCORERS.keys())
Hyperparameter Tuning in Python

GridSearchCV 'refit'

 

Vstup refit:

  • Přizpůsobí nejlepší hyperparametry trénovacím datům
  • Umožňuje použít objekt GridSearchCV jako estimátor (pro predikci)
  • Velmi užitečná volba!
Hyperparameter Tuning in Python

GridSearchCV 'n_jobs'

Vstup n_jobs:

  • Umožňuje paralelní zpracování
  • Více modelů lze trénovat současně, nikoli postupně

Užitečný kód:

import os
print(os.cpu_count())

Pozor: pokud potřebujete počítač i pro jinou práci, nevyužívejte všechna jádra pro trénování!

Hyperparameter Tuning in Python

GridSearchCV 'return_train_score'

 

Vstup return_train_score:

  • Zaznamenává statistiky o provedených tréninkových bězích
  • Užitečné pro analýzu kompromisu mezi biasem a variancí, ale zvyšuje výpočetní náklady.
  • Nepomáhá při výběru nejlepšího modelu, slouží pouze k analýze
Hyperparameter Tuning in Python

Vytvoření objektu GridSearchCV

 

Vytvoření vlastního objektu GridSearchCV:

# Create the grid
param_grid = {'max_depth': [2, 4, 6, 8], 'min_samples_leaf': [1, 2, 4, 6]}

#Get a base classifier with some set parameters. rf_class = RandomForestClassifier(criterion='entropy', max_features='auto')
Hyperparameter Tuning in Python

Vytvoření objektu GridSearchCV

 

Složení dílů dohromady:

grid_rf_class = GridSearchCV(
    estimator = rf_class,
    param_grid = parameter_grid,
    scoring='accuracy',
    n_jobs=4,
    cv = 10,
    refit=True,
    return_train_score=True)
Hyperparameter Tuning in Python

Použití objektu GridSearchCV

 

Protože jsme nastavili refit na True, můžeme objekt přímo použít:

#Fit the object to our data
grid_rf_class.fit(X_train, y_train)

# Make predictions
grid_rf_class.predict(X_test)
Hyperparameter Tuning in Python

Pojďme si to procvičit!

Hyperparameter Tuning in Python

Preparing Video For Download...