Recherche par grille avec Scikit Learn

Ajustement des hyperparamètres en Python

Alex Scriven

Data Scientist

Objet GridSearchCV

 

Présentation d'un objet GridSearchCV :

sklearn.model_selection.GridSearchCV(
    estimator,
    param_grid, scoring=None, fit_params=None,
    n_jobs=None, refit=True, cv='warn',
    verbose=0, pre_dispatch='2*n_jobs',
    error_score='raise-deprecating',
    return_train_score='warn')
Ajustement des hyperparamètres en Python

Étapes d'une recherche par grille

 

Étapes d'une recherche par grille :

  1. Un algorithme dont régler les hyperparamètres (souvent appelé « estimateur »)
  2. Définir quels hyperparamètres régler
  3. Définir l'intervalle de valeurs pour chaque hyperparamètre
  4. Choisir un schéma de validation croisée ; et
  5. Définir une fonction de score pour choisir la meilleure case de la grille
  6. Inclure d'autres infos ou fonctions utiles
Ajustement des hyperparamètres en Python

Entrées de l'objet GridSearchCV

Les entrées importantes :

  • estimator
  • param_grid
  • cv
  • scoring
  • refit
  • n_jobs
  • return_train_score
Ajustement des hyperparamètres en Python

« estimator » de GridSearchCV

 

L'entrée estimator :

  • Essentiellement, notre algorithme
  • Vous avez déjà utilisé KNN, Random Forest, GBM, Logistic Regression

 

À retenir :

  • Un seul estimateur par objet GridSearchCV
Ajustement des hyperparamètres en Python

« param_grid » de GridSearchCV

L'entrée param_grid :

  • Définir quels hyperparamètres et valeurs tester

Plutôt qu'une liste :

max_depth_list = [2, 4, 6, 8]
min_samples_leaf_list = [1, 2, 4, 6]

Ce serait :

param_grid = {'max_depth': [2, 4, 6, 8],
              'min_samples_leaf': [1, 2, 4, 6]}
Ajustement des hyperparamètres en Python

« param_grid » de GridSearchCV

L'entrée param_grid :

Rappel : les clés de votre dictionnaire param_grid doivent être des hyperparamètres valides.

Par exemple, pour un estimateur Logistic regression :

# Incorrect
param_grid = {'C': [0.1,0.2,0.5],
              'best_choice': [10,20,50]}
ValueError: Invalid parameter best_choice for estimator LogisticRegression
Ajustement des hyperparamètres en Python

« cv » de GridSearchCV

L'entrée cv :

  • Choix de la méthode de validation croisée
  • Un entier lance une validation croisée en k plis ; 5 ou 10 est courant

k-fold wikipedia

Ajustement des hyperparamètres en Python

« scoring » de GridSearchCV

 

L'entrée scoring :

  • Quel score utiliser pour choisir la meilleure case (modèle)
  • Utilisez le vôtre ou le module metrics de Scikit Learn

Pour voir toutes les fonctions de score intégrées :

from sklearn import metrics
sorted(metrics.SCORERS.keys())
Ajustement des hyperparamètres en Python

« refit » de GridSearchCV

 

L'entrée refit :

  • Ajuste les meilleurs hyperparamètres aux données d'entraînement
  • Permet d'utiliser l'objet GridSearchCV comme estimateur (pour la prédiction)
  • Très pratique !
Ajustement des hyperparamètres en Python

« n_jobs » de GridSearchCV

L'entrée n_jobs :

  • Aide à l'exécution en parallèle
  • Permet de créer plusieurs modèles en même temps, plutôt qu'en série

Code pratique :

import os
print(os.cpu_count())

Attention à ne pas utiliser tous vos cœurs si vous faites autre chose en même temps !

Ajustement des hyperparamètres en Python

« return_train_score » de GridSearchCV

 

L'entrée return_train_score :

  • Consigne des statistiques sur les entraînements effectués
  • Utile pour analyser le compromis biais-variance, mais coûteux en calcul
  • N'aide pas à choisir le meilleur modèle ; seulement pour l'analyse
Ajustement des hyperparamètres en Python

Créer un objet GridSearchCV

 

Créer notre propre objet GridSearchCV :

# Create the grid
param_grid = {'max_depth': [2, 4, 6, 8], 'min_samples_leaf': [1, 2, 4, 6]}

#Get a base classifier with some set parameters. rf_class = RandomForestClassifier(criterion='entropy', max_features='auto')
Ajustement des hyperparamètres en Python

Créer un objet GridSearchCv

 

Assembler les éléments :

grid_rf_class = GridSearchCV(
    estimator = rf_class,
    param_grid = parameter_grid,
    scoring='accuracy',
    n_jobs=4,
    cv = 10,
    refit=True,
    return_train_score=True)
Ajustement des hyperparamètres en Python

Utiliser un objet GridSearchCV

 

Comme refit est à True, vous pouvez utiliser l'objet directement :

#Fit the object to our data
grid_rf_class.fit(X_train, y_train)

# Make predictions
grid_rf_class.predict(X_test)
Ajustement des hyperparamètres en Python

Passons à la pratique !

Ajustement des hyperparamètres en Python

Preparing Video For Download...