Optimierung der CART-Hyperparameter

Maschinelles Lernen mit baumbasierten Modellen in Python

Elie Kawerk

Data Scientist

Hyperparameter

Machine-Learning-Modell:

  • Parameter: von den Daten gelernt

    • CART-Beispiel: Split-Punkt eines Knotens, Split-Merkmal eines Knotens
  • Hyperparameter: werden nicht aus den Daten gelernt, sondern vor dem Training festgelegt

    • CART-Beispiel: max_depth, min_samples_leaf, Splitting-Kriterien
Maschinelles Lernen mit baumbasierten Modellen in Python

Was ist Hyperparameter-Tuning?

  • Fragestellung: optimale Hyperparameter für einen Lernalgorithmus

  • Lösung: Finden der optimalen Hyperparameter, die zu einem optimalen Modell führen

  • Optimales Modell: ergibt einen optimalen score.

  • Score: Im Kontext sklearn: Genauigkeit (der Klassifikation) und der $R^2$ (der Regression).

  • Kreuzvalidierung wird benutzt, um die Generalisierungsleistung zu schätzen.

Maschinelles Lernen mit baumbasierten Modellen in Python

Warum Hyperparameter optimieren?

  • Bei sklearn sind die Standard-Hyperparameter eines Modells nicht für alle Probleme optimal.

  • Die Hyperparameter sollten optimiert werden, um die beste Modellleistung zu erzielen.

Maschinelles Lernen mit baumbasierten Modellen in Python

Ansätze zur Hyperparameter-Optimierung

  • Grid Search

  • Random Search

  • Bayesian Optimization

  • Genetic Algorithms

  • ....

Maschinelles Lernen mit baumbasierten Modellen in Python

Grid search cross validation

  • Manuell ein Raster mit einzelnen Hyperparameterwerten festlegen

  • Eine Metrik festlegen, um die Leistung des Modells zu bewerten

  • Gründliches Durchsuchen des Rasters

  • Für jede Kombination von Hyperparametern die CV-Bewertung für jedes Modells durchführen

  • Die optimalen Hyperparameter sind die desjenigen Modells, welches den besten CV-Score aufweist.

Maschinelles Lernen mit baumbasierten Modellen in Python

Grid search cross validation: Beispiel

  • Hyperparameters grids:
    • max_depth = {2,3,4},
    • min_samples_leaf = {0.05, 0.1}
  • hyperparameter space = { (2,0.05) , (2,0.1) , (3,0.05), ... }
  • CV scores = { $score_{(2,0.05)}$ , ... }
  • Optimale Hyperparameter = die Hyperparameter, die zum besten CV-Score passen.
Maschinelles Lernen mit baumbasierten Modellen in Python

Analyse der CART-Hyperparameter in sklearn

# Import DecisionTreeClassifier
from sklearn.tree import DecisionTreeClassifier

# Set seed to 1 for reproducibility
SEED = 1

# Instantiate a DecisionTreeClassifier 'dt'
dt = DecisionTreeClassifier(random_state=SEED)

Maschinelles Lernen mit baumbasierten Modellen in Python

Analyse der CART-Hyperparameter in sklearn

# Print out 'dt's hyperparameters
print(dt.get_params())
        {'class_weight': None,
         'criterion': 'gini',
         'max_depth': None,
         'max_features': None,
         'max_leaf_nodes': None,
         'min_impurity_decrease': 0.0,
         'min_impurity_split': None,
         'min_samples_leaf': 1,
         'min_samples_split': 2,
         'min_weight_fraction_leaf': 0.0,
         'presort': False,
         'random_state': 1,
         'splitter': 'best'}
Maschinelles Lernen mit baumbasierten Modellen in Python
# Import GridSearchCV
from sklearn.model_selection import GridSearchCV

# Define the grid of hyperparameters 'params_dt' params_dt = { 'max_depth': [3, 4,5, 6], 'min_samples_leaf': [0.04, 0.06, 0.08], 'max_features': [0.2, 0.4,0.6, 0.8] }
# Instantiate a 10-fold CV grid search object 'grid_dt' grid_dt = GridSearchCV(estimator=dt, param_grid=params_dt, scoring='accuracy', cv=10, n_jobs=-1)
# Fit 'grid_dt' to the training data grid_dt.fit(X_train, y_train)
Maschinelles Lernen mit baumbasierten Modellen in Python

Die besten Hyperparameter extrahieren

# Extract best hyperparameters from 'grid_dt'
best_hyperparams = grid_dt.best_params_
print('Best hyerparameters:
', best_hyperparams)


Best hyerparameters: {'max_depth': 3, 'max_features': 0.4, 'min_samples_leaf': 0.06}
# Extract best CV score from 'grid_dt' best_CV_score = grid_dt.best_score_ print('Best CV accuracy'.format(best_CV_score))
Best CV accuracy: 0.938
Maschinelles Lernen mit baumbasierten Modellen in Python

Den besten estimator extrahieren

# Extract best model from 'grid_dt'
best_model = grid_dt.best_estimator_

# Evaluate test set accuracy test_acc = best_model.score(X_test,y_test) # Print test set accuracy print("Test set accuracy of best model: {:.3f}".format(test_acc))
Test set accuracy of best model: 0.947
Maschinelles Lernen mit baumbasierten Modellen in Python

Lass uns üben!

Maschinelles Lernen mit baumbasierten Modellen in Python

Preparing Video For Download...