Dostrajanie hiperparametrów

Nadzorowane uczenie maszynowe z scikit-learn

George Boorman

Core Curriculum Manager

Dostrajanie hiperparametrów

  • Regresja grzbietowa/lasso: wybór alpha

  • KNN: wybór n_neighbors

  • Hiperparametry: parametry określane przed dopasowaniem modelu

    • Np. alpha i n_neighbors
Nadzorowane uczenie maszynowe z scikit-learn

Wybór właściwych hiperparametrów

  1. Wypróbuj wiele różnych wartości hiperparametrów

  2. Dopasuj każdy z nich osobno

  3. Oceń jakość dopasowania

  4. Wybierz najlepsze wartości

 

  • To jest dostrajanie hiperparametrów

  • Należy stosować kroswalidację, aby uniknąć przeuczenia na zbiorze testowym

  • Dane można podzielić i przeprowadzić kroswalidację na zbiorze treningowym

  • Zbiór testowy zachowujemy do końcowej oceny

Nadzorowane uczenie maszynowe z scikit-learn

Kroswalidacja z przeszukiwaniem siatki

siatka potencjalnych wartości n_neighbors od 2 do 11 co 3 oraz opcje metryki: euklidesowa lub manhattan

Nadzorowane uczenie maszynowe z scikit-learn

Kroswalidacja z przeszukiwaniem siatki

wyniki kroswalidacji k-krotnej dla każdej kombinacji hiperparametrów w siatce

Nadzorowane uczenie maszynowe z scikit-learn

Kroswalidacja z przeszukiwaniem siatki

wyróżnione 5 sąsiadów i metryka euklidesowa, wynik 0.8748

Nadzorowane uczenie maszynowe z scikit-learn

GridSearchCV w 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
Nadzorowane uczenie maszynowe z scikit-learn

Ograniczenia i alternatywne podejście

  • Kroswalidacja 3-krotna, 1 hiperparametr, 10 wartości = 30 dopasowań
  • Kroswalidacja 10-krotna, 3 hiperparametry, 30 wartości = 900 dopasowań
Nadzorowane uczenie maszynowe z 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
Nadzorowane uczenie maszynowe z scikit-learn

Ocena na zbiorze testowym

test_score = ridge_cv.score(X_test, y_test)

print(test_score)
0.7564731534089224
Nadzorowane uczenie maszynowe z scikit-learn

Czas na ćwiczenia!

Nadzorowane uczenie maszynowe z scikit-learn

Preparing Video For Download...