Ladění hyperparametrů

Supervised Learning with scikit-learn

George Boorman

Core Curriculum Manager

Ladění hyperparametrů

  • Ridge/lasso regrese: volba alpha

  • KNN: volba n_neighbors

  • Hyperparametry: parametry zadané před fitováním modelu

    • Např. alpha a n_neighbors
Supervised Learning with scikit-learn

Výběr správných hyperparametrů

  1. Vyzkoušet různé hodnoty hyperparametrů

  2. Fitovat je samostatně

  3. Vyhodnotit jejich výkonnost

  4. Zvolit nejlepší hodnoty

 

  • Tento proces se nazývá ladění hyperparametrů

  • Je nutné použít křížovou validaci, aby nedošlo k overfittingu na testovací sadě

  • Data lze rozdělit a provést křížovou validaci na trénovací sadě

  • Testovací sada se ponechá pro závěrečné vyhodnocení

Supervised Learning with scikit-learn

Křížová validace pomocí grid search

mřížka potenciálních hodnot n_neighbors od 2 do 11 s krokem 3 a možnosti metriky euclidean nebo manhattan

Supervised Learning with scikit-learn

Křížová validace pomocí grid search

skóre k-fold křížové validace pro každou kombinaci hyperparametrů v mřížce

Supervised Learning with scikit-learn

Křížová validace pomocí grid search

zvýraznění 5 sousedů a metriky euclidean se skóre 0,8748

Supervised Learning with scikit-learn

GridSearchCV v scikit-learn

from sklearn.model_selection import GridSearchCV

kf = KFold(n_splits=5, shuffle=True, random_state=42)
param_grid = {"alpha": np.arange(0.0001, 1, 10), "solver": ["sag", "lsqr"]}
ridge = Ridge()
ridge_cv = GridSearchCV(ridge, param_grid, cv=kf)
ridge_cv.fit(X_train, y_train)
print(ridge_cv.best_params_, ridge_cv.best_score_)
{'alpha': 0.0001, 'solver': 'sag'}
0.7529912278705785
Supervised Learning with scikit-learn

Omezení a alternativní přístup

  • 3-fold křížová validace, 1 hyperparametr, 10 hodnot = 30 fitů
  • 10-fold křížová validace, 3 hyperparametry, 30 hodnot = 900 fitů
Supervised Learning with scikit-learn

RandomizedSearchCV

from sklearn.model_selection import RandomizedSearchCV

kf = KFold(n_splits=5, shuffle=True, random_state=42) param_grid = {'alpha': np.arange(0.0001, 1, 10), "solver": ['sag', 'lsqr']} ridge = Ridge()
ridge_cv = RandomizedSearchCV(ridge, param_grid, cv=kf, n_iter=2) ridge_cv.fit(X_train, y_train)
print(ridge_cv.best_params_, ridge_cv.best_score_)
{'solver': 'sag', 'alpha': 0.0001}
0.7529912278705785
Supervised Learning with scikit-learn

Vyhodnocení na testovací sadě

test_score = ridge_cv.score(X_test, y_test)

print(test_score)
0.7564731534089224
Supervised Learning with scikit-learn

Pojďme procvičovat!

Supervised Learning with scikit-learn

Preparing Video For Download...