Réglage des hyperparamètres d'un CART

Machine learning avec des modèles arborescents en Python

Elie Kawerk

Data Scientist

Hyperparamètres

Modèle de machine learning :

  • paramètres : issus des données

    • Exemple CART : point de division d'un nœud, caractéristique de division d'un nœud, etc.
  • hyperparamètres : non appris à partir des données, définis avant l'entraînement

    • Exemple CART : max_depth, min_samples_leaf, critère de division...
Machine learning avec des modèles arborescents en Python

Qu'est-ce que le réglage des hyperparamètres ?

  • Problème : recherche d'un ensemble d'hyperparamètres optimaux pour un algorithme d'apprentissage.

  • Solution : identifier un ensemble d'hyperparamètres optimaux qui aboutissent à un modèle optimal.

  • Modèle optimal : fournit un score optimal.

  • Score : dans sklearn, la valeur par défaut est la précision (classification) et $R^2$ (régression).

  • La validation croisée est utilisée pour estimer la performance de généralisation.

Machine learning avec des modèles arborescents en Python

Pourquoi ajuster les hyperparamètres ?

  • Dans sklearn, les hyperparamètres par défaut d'un modèle ne sont pas optimaux pour tous les problèmes.

  • Les hyperparamètres doivent être ajustés afin d'obtenir les meilleures performances possibles du modèle.

Machine learning avec des modèles arborescents en Python

Approches pour le réglage des hyperparamètres

  • Recherche par grille

  • Recherche aléatoire

  • Optimisation bayésienne

  • Algorithmes génétiques

Machine learning avec des modèles arborescents en Python

Validation croisée par recherche par grille

  • Définir manuellement une grille de valeurs d'hyperparamètres distinctes.

  • Définir un indicateur pour évaluer la performance du modèle.

  • Effectuer une recherche exhaustive dans la grille.

  • Pour chaque ensemble d'hyperparamètres, évaluer le score CV de chaque modèle.

  • Les hyperparamètres optimaux sont ceux du modèle qui obtient le meilleur score CV.

Machine learning avec des modèles arborescents en Python

Validation croisée par recherche par grille : exemple

  • Grilles d'hyperparamètres :
    • max_depth = {2,3,4},
    • min_samples_leaf = {0,05, 0,1}
  • Espace des hyperparamètres = { (2,0,05), (2,0,1), (3,0,05), ... }
  • Scores CV = { $score_{(2,0.05)}$, … }
  • hyperparamètres optimaux = ensemble d'hyperparamètres correspondant au meilleur score CV.
Machine learning avec des modèles arborescents en Python

Vérification des hyperparamètres d'un modèle CART dans 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)

Machine learning avec des modèles arborescents en Python

Vérification des hyperparamètres d'un modèle CART dans 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'}
Machine learning avec des modèles arborescents en 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)
Machine learning avec des modèles arborescents en Python

Extraction des meilleurs hyperparamètres

# 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
Machine learning avec des modèles arborescents en Python

Extraction du meilleur estimateur

# 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
Machine learning avec des modèles arborescents en Python

Passons à la pratique !

Machine learning avec des modèles arborescents en Python

Preparing Video For Download...