Blog ENI : Toute la veille numérique !
🎁 Jusqu'au 25/12 : 1 commande de contenus en ligne
= 1 chance de gagner un cadeau*. Cliquez ici
🎁 Jusqu'au 31/12, recevez notre
offre d'abonnement à la Bibliothèque Numérique. Cliquez ici
  1. Livres et vidéos
  2. Gradient Boosting
  3. Hyperparameters Tuning
Extrait - Gradient Boosting Exploitez les arbres de décision pour le Machine Learning (XGBoost, CatBoost, LightGBM)
Extraits du livre
Gradient Boosting Exploitez les arbres de décision pour le Machine Learning (XGBoost, CatBoost, LightGBM)
1 avis
Revenir à la page d'achat du livre

Hyperparameters Tuning

Principes

Les chapitres précédents ont été l’occasion de montrer que construire un ensemble d’arbres de décision nécessite une expertise avancée du Data Scientist. Profondeur maximale, nombre d’arbres, nombre minimal de points par feuille, paramètre de régularisation, taux d’apprentissage… la liste des paramètres à configurer automatiquement est longue. Le risque d’obtenir un modèle sous optimal suite à un mauvais choix n’est pas négligeable.

Ce chapitre va balayer dans un premier temps les méthodes disponibles sur étagère pour tester automatiquement des configurations d’hyperparamètres.

Il parcourra ensuite les principaux hyperparamètres qu’il incombe de fixer de manière adaptée, en montrant leur impact sur les modèles générés.

Viendra ensuite une section présentant les librairies majeures implémentant des algorithmes plus ou moins évolués pour la recherche de l’ensemble optimal d’hyperparamètres pour un problème donné.

L’avant-dernière section sera l’occasion d’affermir la compréhension de ce sujet crucial, en détaillant l’implémentation d’un algorithme d’affinage des hyperparamètres, Hyperparameters Tuning en anglais, basé sur XGBoost.

Enfin, le lien entre Hyperparameter Tuning et AutoML sera abordé.

1. Motivations

Le rôle des méthodes d’optimisation des hyperparamètres est justement d’explorer l’espace de configuration formé par tous ces paramètres et de trouver le plus rapidement possible...

Hyperparamètres

1. Définition

Comme l’a montré le chapitre sur le fonctionnement du Gradient Boosting, lors de l’entraînement d’un arbre de décision avec une méthode de Gradient Boosting, seuls les poids associés aux feuilles et les critères de décision sont appris. 

La structure de l’arbre, c’est-à-dire sa profondeur maximale et le nombre d’estimateurs, sont fixés par avance, selon le choix du Data Scientist.

Ces valeurs, de même que le nombre minimal d’échantillons par feuille, sont tout à fait cruciales dans les performances finales du modèle.

Ces types de paramètres, qui n’évoluent pas lors de l’apprentissage, sont appelés hyperparamètres.

Il est donc tout à fait essentiel de comprendre le rôle de ces paramètres à différents niveaux. Tout d’abord, ils ont un impact sur la structure de la forêt d’arbres générée. Ensuite, ils influent sur le temps d’apprentissage du modèle, c’est-à-dire sur la puissance de calcul requise pour les entraîner.

Et enfin, et c’est le point névralgique, ils gouvernent les performances du modèle final.

Les sections suivantes vont être l’occasion de détailler chacun de ces hyperparamètres, afin de comprendre quelle valeur leur donner pour obtenir un modèle répondant à un besoin particulier.

Il est important de noter que même si les hyperparamètres sont communs à la plupart des implémentations du Gradient Boosting pour les arbres de décision, il n’en reste pas moins que chaque librairie peut proposer des paramètres additionnels. Ce chapitre va présenter les principaux.

2. Paramètres structurels

a. Nombre d’estimateurs

Le premier hyperparamètre à considérer lors de la configuration de l’entraînement d’une forêt d’arbres de décision est le nombre d’estimateurs.

Ce nombre indique combien d’arbres vont être entraînés, de manière séquentielle et incrémentale, pour construire le prédicteur fort final.

Le raisonnement qui doit sous-tendre le choix de la valeur de ce paramètre...

Bibliothèques existantes pour l’optimisation des hyperparamètres

Comme l’ont montré les sections précédentes, qui ont présenté de manière non exhaustive les grands hyperparamètres à prendre en compte, la combinatoire à explorer pour configurer un modèle peut rapidement devenir conséquente. Il est fastidieux, improductif et même souvent impossible d’évaluer manuellement toutes les possibilités.

La première section de ce chapitre a présenté les principaux types de méthodes utilisables pour automatiser cette exploration.

Cette nouvelle section liste et détaille quelques-unes des librairies parmi les plus connues pour automatiser cette recherche.

Toutes apportent une solution à la problématique suivante : trouver la combinaison de paramètres optimale en regard d’un objectif précis et chiffré. Chacune propose une stratégie différente pour y parvenir.

1. Scikit-learn

Scikit-learn est la boîte à outils de référence du Data Scientist travaillant en Python. Elle couvre de nombreux domaines, de la classification à la régression, en passant par la réduction de dimensions, le prétraitement des données et le clustering. Elle implémente bien sûr des méthodes de sélection d’hyperparamètres.

Celles-ci ne sont pas parmi les plus évoluées et sont des dérivées des méthodes de type brute force présentées en tête de ce chapitre.

Elles ne conviendront pas pour des modélisations où le volume et/ou la complexité des données induisent des temps d’entraînement longs. Par contre, dans des cas plus simples, leur caractère exhaustif peut s’avérer intéressant. 

Les quelques lignes ci-dessous donnent un exemple de l’utilisation de GridSearchCV, qui réalise une recherche exhaustive par brute force :

from sklearn import svm, datasets 
from sklearn.model_selection import GridSearchCV 
 
iris = datasets.load_iris() 
parameters = {'kernel':('linear'...

Optimisation d’XGBoost avec XGBoost

1. Objectif

Cette avant-dernière section va être l’occasion de voir concrètement comment implémenter une recherche d’hyperparamètres efficace, basée sur une approche de type substitut (surrogate en anglais). Et pour rester dans le thème de cet ouvrage et s’appuyer sur la librairie de Gradient Boosting qui a le suffrage de la majorité de la communauté des Data Scientists, XGBoost sera utilisé comme substitut. XGBoost sera alors utilisé pour optimiser XGBoost.

2. Principe général

L’idée maîtresse de l’optimisation à l’aide d’un modèle substitut est de pouvoir évaluer la pertinence d’une configuration sans avoir à faire tourner un entraînement complet.

Le gain est alors d’autant plus important que le modèle de substitution donne rapidement cette évaluation, et ce de manière fiable.

Une fois ce substitut à disposition, l’algorithme général est simple : n configurations sont tirées au hasard. Le modèle de substitution effectue une estimation du gain pour chacune. La configuration la plus prometteuse est alors testée réellement sur le modèle à entraîner. Le gain obtenu est réutilisé pour enrichir le modèle substitut.

Cet enchaînement est réitéré autant de fois que nécessaire, généralement un nombre fixe de fois.

3. Espace de configuration et échantillonnage

Il y a deux préalables à la recherche d’une configuration optimale d’hyperparamètres :

  • Il faut pouvoir décrire cet espace d’exploration.

  • Il faut pouvoir échantillonner, c’est-à-dire tirer aléatoirement des configurations de cet espace.

Fort heureusement, il existe en Python une librairie qui rend cela facile : ConfigSpace.

Les quelques lignes suivantes clarifient son usage, en commençant par ajouter des paramètres numériques :

from ConfigSpace import ConfigurationSpace 
from ConfigSpace.hyperparameters import CategoricalHyperparameter,  
\ 
    UniformFloatHyperparameter, UniformIntegerHyperparameter 
 
num_trees = UniformIntegerHyperparameter("num_trees"...

AutoML et Hyperparameters Tuning

Quelques outils commencent à proposer une automatisation du Machine Learning : il s’agit de l’autoML. Le but de ces derniers est de choisir automatiquement le meilleur modèle parmi plusieurs possibles. L’espace de recherche est très large : régression linéaire, régression logistique, arbres de décision, Support Vector Machine, KNN…

En ce sens, le problème à résoudre est très similaire à la recherche d’hyperparamètres. Les méthodes qui ont été présentées ici peuvent s’appliquer directement à ce cas d’usage.