Ajustarea hiperparametrilor

Învățare supravegheată cu scikit-learn

George Boorman

Core Curriculum Manager

Ajustarea hiperparametrilor

  • Regresie Ridge/Lasso: alegerea alpha

  • KNN: alegerea n_neighbors

  • Hiperparametri: parametri specificați înainte de antrenarea modelului

    • Precum alpha și n_neighbors
Învățare supravegheată cu scikit-learn

Alegerea hiperparametrilor corecți

  1. Testați mai multe valori ale hiperparametrilor

  2. Antrenați modelul separat pentru fiecare

  3. Evaluați performanța fiecăruia

  4. Alegeți valorile cu cele mai bune rezultate

 

  • Aceasta se numește ajustarea hiperparametrilor

  • Este esențial să folosiți validarea încrucișată pentru a evita supraajustarea pe setul de test

  • Datele pot fi împărțite, iar validarea încrucișată aplicată pe setul de antrenament

  • Setul de test este rezervat pentru evaluarea finală

Învățare supravegheată cu scikit-learn

Validare încrucișată prin căutare pe grilă

grilă cu valori posibile ale n_neighbors de la 2 la 11 cu pas de 3 și opțiunile euclidean sau manhattan pentru metrică

Învățare supravegheată cu scikit-learn

Validare încrucișată prin căutare pe grilă

scoruri de validare încrucișată k-fold pentru fiecare combinație de hiperparametri din grilă

Învățare supravegheată cu scikit-learn

Validare încrucișată prin căutare pe grilă

5 vecini și metrica euclidiană evidențiate, cu scorul 0.8748

Învățare supravegheată cu scikit-learn

GridSearchCV în 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
Învățare supravegheată cu scikit-learn

Limitări și o abordare alternativă

  • Validare încrucișată în 3 iterații, 1 hiperparametru, 10 valori = 30 ajustări
  • Validare încrucișată în 10 iterații, 3 hiperparametri, 30 valori = 900 ajustări
Învățare supravegheată cu 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
Învățare supravegheată cu scikit-learn

Evaluarea pe setul de test

test_score = ridge_cv.score(X_test, y_test)

print(test_score)
0.7564731534089224
Învățare supravegheată cu scikit-learn

Să exersăm!

Învățare supravegheată cu scikit-learn

Preparing Video For Download...