Hyperparameterjustering

Övervakad inlärning med scikit-learn

George Boorman

Core Curriculum Manager

Hyperparameterjustering

  • Ridge/lasso-regression: Välj alpha

  • KNN: Välj n_neighbors

  • Hyperparametrar: Parametrar vi anger innan modellen tränas

    • Till exempel alpha och n_neighbors
Övervakad inlärning med scikit-learn

Välja rätt hyperparametrar

  1. Testa många olika hyperparametervärden

  2. Träna modellen separat för vart och ett

  3. Utvärdera hur väl de presterar

  4. Välj de bäst presterande värdena

 

  • Detta kallas hyperparameterjustering

  • Korsvalidering är nödvändigt för att undvika överanpassning till testmängden

  • Vi kan dela upp data och utföra korsvalidering på träningsdatan

  • Testmängden sparas för slutlig utvärdering

Övervakad inlärning med scikit-learn

Grid search-korsvalidering

rutnät med möjliga värden för n_neighbors från 2 till 11 i steg om 3, samt måttval: euclidean eller manhattan

Övervakad inlärning med scikit-learn

Grid search-korsvalidering

k-faldig korsvalideringspoäng för varje kombination av hyperparametrar i rutnätet

Övervakad inlärning med scikit-learn

Grid search-korsvalidering

5 grannar och euclidean-måttet markerat, med poängen 0.8748

Övervakad inlärning med scikit-learn

GridSearchCV i 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
Övervakad inlärning med scikit-learn

Begränsningar och ett alternativt tillvägagångssätt

  • 3-faldig korsvalidering, 1 hyperparameter, 10 värden = 30 anpassningar
  • 10-faldig korsvalidering, 3 hyperparametrar, 30 värden = 900 anpassningar
Övervakad inlärning med 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
Övervakad inlärning med scikit-learn

Utvärdering på testmängden

test_score = ridge_cv.score(X_test, y_test)

print(test_score)
0.7564731534089224
Övervakad inlärning med scikit-learn

Nu kör vi en övning!

Övervakad inlärning med scikit-learn

Preparing Video For Download...