Menu
CoddyTech

Profundidade da árvore

Parte da seção Aprendizado supervisionado do Journey de Machine Learning da Coddy. Lição 29 de 58.

Uma árvore pode continuar perguntando até que cada linha de treinamento tenha sua própria resposta. Então, ela memorizou, não aprendeu:

Acurácia de treinamento e teste de árvores com profundidade de 1 a 12 em dados ruidosos de meia-lua. A de treinamento sobe até 1.0 na profundidade 8, com o rótulo memorização. A de teste atinge o pico de 0.907 na profundidade 6, marcada por uma linha tracejada, e então cai para cerca de 0.87

Árvores profundas aprendem o ruído de suas próprias linhas de treinamento, então a precisão no teste atinge um pico e depois cai. Experimente várias 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))

Nessas luas, a profundidade 6 tem o melhor desempenho em novas linhas: mantenha-a, por enquanto. A partir da profundidade 8, a árvore é perfeita nas linhas que memorizou e tem desempenho pior nas demais.

challenge icon

Desafio

Médio

Uma pesquisa telescópica classifica objetos celestes em estrelas e galáxias. O código inicial os divide e prepara o gráfico.

  1. Para cada profundidade em depths, treine uma árvore (random_state=0) e mantenha as duas acurácias.
  2. Imprima a profundidade com a melhor acurácia de teste, como abaixo.
  3. Trace as duas linhas, identificadas como train e test, marque a melhor profundidade com uma linha tracejada ax.axvline, adicione uma legenda e exiba o gráfico.

Para um classificador de mangas:

Best depth: 5, test accuracy 0.867

Em seguida, Coddy descreve seu gráfico. O gráfico deles é assim:

Um gráfico intitulado Maduro ou não?, com profundidade da árvore de 1 a 10 no eixo horizontal: uma linha azul de treino que sobe até cerca de 0.98, uma linha laranja de teste que atinge o pico próximo de 0.87 na profundidade 5 e uma linha vertical tracejada nesse ponto, com uma legenda

Experimente você mesmo

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

# Uma linha por objeto celeste em um levantamento com telescópio: 1 em galaxy indica uma galáxia; 0, uma estrela
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")

# Escreva seu código abaixo
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Aprendizado supervisionado

Pratique por conta própria: Compilador de Python online