Menu
CoddyTech

Boosting par gradient

Fait partie de la section Apprentissage supervisé du Journey Machine Learning de Coddy. Leçon 43 sur 58.

Une forêt fait pousser ses arbres côte à côte. Le Gradient Boosting les fait pousser les uns après les autres : chaque nouvel arbre apprend ce que les arbres précédents continuent de prédire incorrectement.

Ici, il ajuste les ventes d’un bar à smoothies, arbre par arbre :

Points gris représentant 40 jours de ventes de smoothies en fonction de la température, passant d’environ 20 à 135. Une ligne en pointillés après 1 arbre forme une marche approximative et plate, une ligne en tirets après 3 arbres suit mieux les points, et une ligne pleine après 15 arbres passe au milieu des points

Pour les classes, le modèle est GradientBoostingClassifier :

from sklearn.ensemble import GradientBoostingClassifier

boost = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, random_state=0)
boost.fit(X_train, y_train)

learning_rate définit la part de chaque correction à conserver. Les petits pas sont prudents, ils nécessitent donc davantage d’arbres.

challenge icon

Défi

Moyen

Un producteur d’orchidées veut savoir quelles plantes vont fleurir. Le code de départ divise orchids.csv, évalue une forêt et lit un nombre d’arbres.

  1. Pour chaque taux dans rates, entraînez un modèle de boosting avec ce nombre d’arbres (random_state=0) et affichez sa précision sur le jeu de test.
  2. Affichez le meilleur taux. En cas d’égalité, gardez le premier.

Pour un autre producteur et 20 :

Forest: 0.860
Boosting at rate 0.01: 0.600
Boosting at rate 0.1: 0.860
Boosting at rate 1.0: 0.900
Best rate for 20 trees: 1.0

Essayez ensuite quelques nombres d’arbres : à partir de quand le boosting fait-il mieux que la forêt ?

Essayez vous-même

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier

# Orchidées sur les étagères d'un horticulteur : ont fleuri cette année (1) ou non (0)
orchids = pd.read_csv("orchids.csv")
X = orchids.drop(columns="bloomed")
y = orchids["bloomed"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
trees = int(input())
rates = [0.01, 0.1, 1.0]

# Ne modifiez pas les lignes ci-dessous : la forêt servant de comparaison
forest = RandomForestClassifier(n_estimators=100, random_state=0)
forest.fit(X_train, y_train)
print(f"Forest: {forest.score(X_test, y_test):.3f}")

# Écrivez votre code ci-dessous
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Apprentissage supervisé

Entraînez-vous par vous-même : Compilateur Python en ligne