Menu
CoddyTech

Profondeur de l’arbre

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

Un arbre peut continuer à poser des questions jusqu’à ce que chaque ligne d’entraînement ait sa propre réponse. Il a alors mémorisé, au lieu d’apprendre :

Précision sur les données d’entraînement et de test des arbres de profondeur 1 à 12 sur des données bruitées en forme de demi-lunes. La précision sur les données d’entraînement atteint 1.0 à la profondeur 8, avec l’étiquette « mémorisation ». La précision sur les données de test atteint un maximum de 0.907 à la profondeur 6, indiqué par une ligne pointillée, puis baisse à environ 0.87

Les arbres profonds apprennent le bruit de leurs propres lignes d’entraînement, donc la précision sur l’ensemble de test atteint un maximum, puis diminue. Essayez plusieurs profondeurs :

train = []
test = []
for d in range(1, 13):
    tree = DecisionTreeClassifier(max_depth=d, random_state=0)
    tree.fit(X_train, y_train)
    train.append(tree.score(X_train, y_train))
    test.append(tree.score(X_test, y_test))

Sur ces lunes, la profondeur 6 donne les meilleurs résultats sur les nouvelles lignes : gardez-la pour l’instant. À partir de la profondeur 8, l’arbre est parfait sur les lignes qu’il a mémorisées, mais moins performant sur les autres.

challenge icon

Défi

Moyen

Une étude télescopique classe les objets célestes en étoiles et en galaxies. Le code de départ les répartit et prépare le graphique.

  1. Pour chaque profondeur dans depths, entraîne un arbre (random_state=0) et conserve les deux précisions.
  2. Affiche la profondeur ayant la meilleure précision de test, comme ci-dessous.
  3. train et test, indique la meilleure profondeur avec une ligne verticale en pointillés ax.axvline, ajoute une légende, puis affiche le graphique.

Pour un trieur de mangues :

Best depth: 5, test accuracy 0.867

Ensuite, Coddy décrit ton graphique. Le sien ressemble à ceci :

Un graphique intitulé « Mûr ou non ? » avec une profondeur d’arbre allant de 1 à 10 : une courbe bleue d’entraînement qui monte jusqu’à environ 0.98, une courbe orange de test qui atteint un pic proche de 0.87 à la profondeur 5 et une ligne verticale en pointillés à cet endroit, avec une légende

Essayez vous-même

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

# Une ligne par objet céleste dans un relevé au télescope : 1 dans galaxy indique une galaxie, 0 une étoile
sky = pd.read_csv("sky.csv")
features = ["brightness_mag", "size_arcsec", "roundness", "color_index"]
X_train, X_test, y_train, y_test = train_test_split(sky[features], sky["galaxy"], test_size=0.25, random_state=0)
depths = range(1, 11)

fig, ax = plt.subplots()
ax.set_title("Star or Galaxy?")
ax.set_xlabel("Tree depth")
ax.set_ylabel("Accuracy")

# É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