La forêt aléatoire (Random Forest) en Machine Learning

Temps de lecture : 6 minutes

Dans un précédent article, je t’ai présenté le concept de l’arbre de décision (« decision tree » en anglais). Aujourd’hui, ratissons plus large et plus avancé pour couvrir le concept de la forêt aléatoire (« random forest » en anglais). Et non, je n’essaie pas encore de faire un jeu de mot foireux sur « arbre » et « forêt » ! En réalité, le concept de forêt aléatoire est essentiellement basé sur celui d’arbre de décision ! Donc si ce n’est pas déjà fait, je te recommande de commencer par l’article sur l’arbre de décision 😉.

Mais allez, je suis sympa, je te fais un petit rappel quand même !

Arbre de décision : petit rappel
Le principe

Comme son nom l’indique, c’est une méthode qui permet, à partir de questions successives de ranger des données en entrée dans des classes spécifiques en sortie. Toujours un peu opaque ? Ce n’est pas grave ! Reprenons l’exemple des séries télévisées : on essaie de mettre en place un algorithme pour prédire si un individu aimera la série « Parks & Recreation (PR) » en fonction de ses goûts pour « Friends » et « How I Met Your Mother (HIMYM) ». Les données recueillies ressemblent à ceci :

Nous avons montré que l’arbre de décision permettant de résoudre ce problème est :

Ok, j’espère que là, c’est beaucoup plus clair pour toi 😀!

Mais si l’arbre de décision marche si simplement et si efficacement, pourquoi envisager d’autres méthodes de résolution ?

Les limitations

Tu peux bien sûr remarquer que l’arbre de décision est facile et rapide à implémenter. De plus, il est plutôt aisément interprétable. Mais… son plus grand problème est qu’il est un peu trop dépendant des données utilisées pour l’entraîner. Ce manque de flexibilité fait qu’il performe mal quand on essaie de le généraliser à de nouvelles données : dans le jargon, on parle d’overfitting. En même temps, quand tu y penses, c’est un comportement qui est naturel ! On demande à un seul arbre entraîné sur un seul jeu de données de répondre a posteriori à toutes les questions du monde. C’est normal qu’il se plante souvent puisqu’il manque de versatilité et de diversité (toujours cette question de diversité 😅)!

C’est exactement là où rentre en jeu la forêt aléatoire. Elle a l’avantage de rajouter de la flexibilité et de la diversité à la simplicité de base de l’arbre de décision. Et comment ? En commençant déjà par créer plusieurs arbres de décision à partir du jeu de données en entrée. « Plusieurs arbres » d’où l’appellation « forêt », malin hein 😛? S’il est une idée principale à retenir sur la forêt aléatoire, c’est principalement celle-là. Mais, regardons de plus près les étapes de son implémentation.

Implémentation de la forêt aléatoire

Pour illustrer plus facilement les étapes de l’implémentation, étoffons un peu notre tableau sur les séries télévisées. Disons qu’on a plus de personnes sondées et qu’on a aussi relevé les préférences pour d’autres séries télévisées comme « Brooklyn 99 » et « New Girl »… De sorte que notre tableau final ressemble à ceci :

Comme je l’ai mentionné plus haut, l’idée de base est de créer plusieurs arbres à partir de ce jeu de données en entrée. Pour créer chaque arbre, il nous faut donc générer un nouveau jeu de données à partir de cette entrée.

Etape 1 : création d’un nouveau jeu de données

Pour constituer le nouveau jeu de données, on tire aléatoirement les individus pour avoir le nombre n d’individus désiré. Première remarque, le tirage se fait avec remise, c’est-à-dire qu’on a le droit de tirer le même individu plus d’une fois. Et deuxième remarque sur le nombre total n d’individus à tirer, ça reste un choix. On peut choisir n = « 80% du nombre total d’individus » comme on peut choisir n = « le nombre total d’individus ». Même dans ce dernier cas, vu qu’on effectue des tirages aléatoires avec remise, on est certain d’avoir des jeux de données différents pour chaque arbre.

Il est néanmoins courant de choisir n = « deux-tiers de la population totale ». Dans tous les cas, c’est un paramètre avec lequel, il convient de jouer pour trouver la valeur optimale.

Si dans notre cas, je pars sur n=8 par exemple, mon nouveau jeu de données pourrait ressembler à ceci :

Et remarque, l’individu 8 est répété 2 fois ! On a le droit, c’est un tirage avec remise 😉.

Etape 2 : construction de l’arbre de décision

Avec ce nouveau jeu de données, on peut désormais construire un premier arbre de décision. Encore pour le petit rappel, l’idée est de trouver les bonnes questions qui permettent de mieux séparer les données en groupes cohérents. Habituellement, pour un arbre de décision seul, il faut parcourir toutes les variables i.e. étudier comment les questions « aime Friends ? », « aime HIMYM ? », « aime Brooklyn 99 ? », « aime New Girl ? » séparent les données et retenir celle qui fait gagner le plus en informations.

Une spécificité de la forêt aléatoire est qu’elle permet de choisir un nombre fixe de variables à parcourir à chaque partage (« split » en anglais »). Donc au lieu d’étudier systématiquement les 4 variables à chaque partage, on peut choisir de se concentrer uniquement sur 2 qui seront choisies aléatoirement. Pourquoi ? Bonne question 😎. C’est toujours dans un souci de diversité ! Certaines variables peuvent avoir un poids important et donc s’imposer à chaque partage. Le fait d’en choisir aléatoirement permet de donner une chance égale à toutes les variables et de garantir plus de représentativité.

Si m est le nombre total de variables, il est courant de commencer par un nombre restreint de variables égal à \sqrt{m}. Mais comme pour n, c’est un paramètre avec lequel il convient de jouer pour trouver la valeur optimale.

Etape 3 : Recommencer l’étape 1 et l’étape 2

Oui, c’est l’étape la plus facile 😋. On a dit que le principe de la forêt aléatoire était de créer le maximum d’arbres de décision pour avoir de la diversité. Donc une fois que notre premier arbre a été construit, on reprend le processus de tirage avec remise suivi de la construction d’un deuxième arbre de décision… et ainsi de suite jusqu’à obtention du nombre total d’arbres de décision désiré. Théoriquement, on peut créer autant d’arbres qu’on veut, c’est « open green bar » (l’esprit de la blague nulle vient encore de frapper !). Mais il faut garder en tête que plus on crée d’arbres et plus le modèle est lourd. Et plus, on mettra de temps à l’entraîner. La multiplication des arbres est donc à utiliser avec parcimonie.

Etape 4 : Exploitation de la forêt aléatoire

A la fin de ces étapes, on a ainsi logiquement, tous les arbres que nous avons construits :

L’utilisation de la forêt aléatoire est plutôt simple. Désormais, lorsqu’on a une nouvelle donnée à classifier, il faut interroger tous les arbres et retenir la réponse de la majorité (oui, la démocratie reste applicable en machine learning). Donc par exemple, si on a créé 100 arbres et que pour notre nouvelle donnée, 60 arbres retournent « aime PR » et 40 retournent « n’aime pas PR », on retiendra que notre nouvel individu aime PR (avec 60% de probabilité). Voili, voilou, plutôt simple, non 😉?

Pour résumer…

On réussit avec la forêt aléatoire à disposer d’un grand nombre d’arbres de décisions aux profils variés. De la sorte, on garantit que la décision finale est le résultat d’une concertation et qu’elle reflète un maximum d’options possibles. Le seul hic de la forêt aléatoire est peut-être qu’elle devient pour le coup, moins facile à interpréter qu’un arbre de décision seul. Et accessoirement, en fonction du nombre d’arbres construits, les consommations en temps et en mémoire peuvent être plus importantes. Mais que veux-tu, on ne peut pas tout avoir dans la vie 😔.

Implémentation sur Python

Comme d’habitude, je t’ai détaillé toutes les étapes de la forêt aléatoire pour que tu comprennes les bases. Mais évidemment que tout est déjà quasiment implémenté sur Python (quel langage généreux !). Pour faire de la classification, il suffit d’aller chercher la fonction RandomForestClassifier dans la librairie sklearn.ensemble. D’ailleurs pour ta culture générale, cette façon de combiner plusieurs estimateurs pour améliorer le résultat final s’appelle de l’ensemble learning. Et le fait de créer de nouveaux jeux de données pour construire chaque nouvel arbre est une méthode particulière d’ensemble learning appelée ensachage ou bagging en anglais.

Sur ces bonnes paroles, moi je crois que je vais sortir de la forêt… Et je te dis à bientôt pour un nouvel article !

Partager

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *