Menu
CoddyTech

Profondità dell’albero

Fa parte della sezione Apprendimento supervisionato del percorso Machine Learning di Coddy. Lezione 29 di 58.

Un albero può continuare a fare domande finché ogni riga di addestramento non ha la propria risposta. A quel punto ha memorizzato, non imparato:

Accuratezza di addestramento e di test degli alberi con profondità da 1 a 12 su dati rumorosi a mezza luna. L'accuratezza di addestramento sale fino a 1.0 alla profondità 8, con l'etichetta «memorizzazione». L'accuratezza di test raggiunge il picco di 0.907 alla profondità 6, indicato da una linea tratteggiata, poi scende a circa 0.87

Gli alberi profondi imparano il rumore delle proprie righe di addestramento, quindi l’accuratezza sul test raggiunge un picco e poi diminuisce. Prova diverse profondità:

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

Su queste lune, la profondità 6 dà i risultati migliori sulle nuove righe: per ora, mantienila. Dalla profondità 8, l’albero è perfetto sulle righe memorizzate, ma peggiore sulle altre.

challenge icon

Sfida

Medio

Un rilevamento telescopico suddivide gli oggetti celesti in stelle e galassie. Il codice iniziale li suddivide e prepara il grafico.

  1. Per ogni profondità in depths, addestra un albero (random_state=0) e conserva entrambe le accuratezze.
  2. Stampa la profondità con la migliore accuratezza di test, come qui sotto.
  3. Traccia entrambe le linee, etichettate train e test, indica la profondità migliore con una linea tratteggiata ax.axvline, aggiungi una legenda e visualizza il grafico.

Per un classificatore di mango:

Best depth: 5, test accuracy 0.867

Poi Coddy descrive il tuo grafico. Il loro è simile a questo:

Un grafico intitolato Maturo o no? con la profondità dell'albero da 1 a 10 sull'asse orizzontale: una linea blu di addestramento che sale fino a circa 0.98, una linea arancione di test che raggiunge il picco vicino a 0.87 alla profondità 5 e una linea verticale tratteggiata in corrispondenza di quel valore, con una legenda

Provalo tu

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

# Una riga per ogni oggetto celeste osservato dal telescopio: 1 in galaxy indica una galassia, 0 una stella
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")

# Scrivi il tuo codice qui sotto
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento supervisionato

Esercitati da solo: Compilatore Python online