Menu
CoddyTech

Profundidad del árbol

Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 29 de 58.

Un árbol puede seguir preguntando hasta que cada fila de entrenamiento tenga su propia respuesta. Entonces ha memorizado, no aprendido:

Precisión de entrenamiento y de prueba de árboles con profundidades de 1 a 12 en datos ruidosos de medias lunas. La precisión de entrenamiento sube hasta 1.0 en la profundidad 8, indicado como memorización. La precisión de prueba alcanza un máximo de 0.907 en la profundidad 6, marcada por una línea discontinua, y después cae a aproximadamente 0.87

Los árboles profundos aprenden el ruido de sus propias filas de entrenamiento, por lo que la precisión en las pruebas alcanza su máximo y después disminuye. Prueba varias profundidades:

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))

En estas lunas, la profundidad 6 funciona mejor con filas nuevas: consérvala, por ahora. A partir de la profundidad 8, el árbol es perfecto con las filas memorizadas, pero peor con el resto.

challenge icon

Desafío

Intermedio

Un estudio telescópico clasifica los objetos celestes en estrellas y galaxias. El código inicial los divide y configura el gráfico.

  1. Para cada profundidad en depths, entrena un árbol (random_state=0) y guarda ambas precisiones.
  2. Imprime la profundidad con la mejor precisión de prueba como se muestra a continuación.
  3. Traza ambas líneas, etiquetadas como train y test, marca la mejor profundidad con una línea discontinua ax.axvline, añade una leyenda y muestra el gráfico.

Para un clasificador de mangos:

Best depth: 5, test accuracy 0.867

Después, Coddy describe tu gráfico. El suyo se ve así:

Un gráfico titulado ¿Maduro o no? con la profundidad del árbol del 1 al 10 en el eje horizontal: una línea azul de train que sube hasta aproximadamente 0.98, una línea naranja de test que alcanza su máximo cerca de 0.87 en la profundidad 5 y una línea vertical discontinua allí, con una leyenda

Pruébalo tú mismo

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

# Una fila por cada objeto celeste en un estudio con telescopio: 1 en galaxy significa que es una galaxia; 0, que es una estrella
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")

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje supervisado

Practica por tu cuenta: Compilador de Python online