Hyperparameterafstemming

Supervised Learning met scikit-learn

George Boorman

Core Curriculum Manager

Hyperparameterafstemming

  • Ridge/lasso-regressie: alpha kiezen

  • KNN: n_neighbors kiezen

  • Hyperparameters: Instellingen vóór het fitten

    • Zoals alpha en n_neighbors
Supervised Learning met scikit-learn

De juiste hyperparameters kiezen

  1. Probeer veel hyperparameterwaarden

  2. Fit ze allemaal apart

  3. Bekijk de prestaties

  4. Kies de beste waarden

 

  • Dit heet hyperparameterafstemming

  • Gebruik cross-validatie om overfitting op de testset te vermijden

  • Splits de data en doe cross-validatie op de trainingsset

  • Bewaar de testset voor de eindscores

Supervised Learning met scikit-learn

Grid search cross-validatie

raster met mogelijke waarden voor n neighbors van 2 tot 11 per 3, en metrics euclidean of manhattan

Supervised Learning met scikit-learn

Grid search cross-validatie

k-fold cross-validatiescores voor elke combinatie van hyperparameters in het raster

Supervised Learning met scikit-learn

Grid search cross-validatie

5 buren en euclidean-metric gemarkeerd, score 0,8748

Supervised Learning met scikit-learn

GridSearchCV in 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 met scikit-learn

Beperkingen en een alternatief

  • 3-voudige cross-validatie, 1 hyperparameter, 10 waarden = 30 fits
  • 10-voudige cross-validatie, 3 hyperparameters, 30 waarden = 900 fits
Supervised Learning met 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 met scikit-learn

Evalueren op de testset

test_score = ridge_cv.score(X_test, y_test)

print(test_score)
0.7564731534089224
Supervised Learning met scikit-learn

Laten we oefenen!

Supervised Learning met scikit-learn

Preparing Video For Download...