Optimierung von Hyperparametern

Überwachtes Lernen mit scikit-learn

George Boorman

Core Curriculum Manager

Optimierung von Hyperparametern

  • Ridge-/Lasso-Regression: Auswahl von alpha

  • KNN: Auswahl von n_neighbors

  • Hyperparameter: Parameter, die vor der Anpassung des Modells festgelegt werden

    • Beispiele: alpha und n_neighbors
Überwachtes Lernen mit scikit-learn

Auswahl geeigneter Hyperparameter

  1. Ausprobieren vieler verschiedener Werte für die Hyperparameter

  2. Separate Anpassung

  3. Bewertung der Leistung

  4. Auswahl der besten Werte

 

  • Prozess wird als Tuning oder Optimierung von Hyperparametern bezeichnet

  • Wichtig: Kreuzvalidierung zur Vermeidung einer Überanpassung an die Testdaten!

  • Datenmenge kann immer noch zerlegt werden, aber Kreuzvalidierung wird mit Trainingsdaten durchgeführt

  • Testdaten werden für die finale Bewertung zurückgelegt

Überwachtes Lernen mit scikit-learn

Rastersuche mit Kreuzvalidierung

Raster mit möglichen Werten für n Nachbarn von 2 bis 11 in Dreierschritten sowie zwei Metriken: euklidischer Abstand und Manhattan-Distanz

Überwachtes Lernen mit scikit-learn

Rastersuche mit Kreuzvalidierung

Ergebnisse der k-fachen Kreuzvalidierung für jede Kombination von Hyperparametern im Raster

Überwachtes Lernen mit scikit-learn

Rastersuche mit Kreuzvalidierung

Hervorgehoben ist der Wert 5 für die Anzahl der Nachbarn und der euklidische Abstand als Kennzahl; der berechnete Wert ist 0,8748

Überwachtes Lernen mit 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
Überwachtes Lernen mit scikit-learn

Einschränkungen und alternativer Ansatz

  • 3-fache Kreuzvalidierung, 1 Hyperparameter, 10 Werte insgesamt = 30 Anpassungen
  • 10-fache Kreuzvalidierung, 3 Hyperparameter, 30 Werte insgesamt = 900 Anpassungen
Überwachtes Lernen mit 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
Überwachtes Lernen mit scikit-learn

Bewertung mithilfe der Testdaten

test_score = ridge_cv.score(X_test, y_test)

print(test_score)
0.7564731534089224
Überwachtes Lernen mit scikit-learn

Lass uns üben!

Überwachtes Lernen mit scikit-learn

Preparing Video For Download...