Menu
CoddyTech

Foreste casuali

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

Un singolo albero decisionale è instabile: basta modificare alcune righe di addestramento e cambiano le sue domande. In questo capitolo renderai gli alberi più stabili chiedendone il parere a molti.

Una foresta casuale addestra molti alberi e li lascia votare. Ecco sette alberi che rispondono per un geyser:

Sette piccoli alberi in fila, ognuno con il proprio voto sotto: sì, sì, no, sì, sì, no, sì. Le frecce portano da ogni voto a un riquadro che dice Foresta: sì, 5 voti a 2

Nel codice, c'è un altro modello da addestrare:

from sklearn.ensemble import RandomForestClassifier

forest = RandomForestClassifier(n_estimators=100, random_state=0)
forest.fit(X_train, y_train)
print(forest.score(X_test, y_test))

Su 300 giorni di geyser, questo stampa 0.893, mentre un albero ha ottenuto un punteggio di 0.813. n_estimators è il numero di alberi.

Molti elettori, meno errori.

challenge icon

Sfida

Medio

Una scuola per cani guida vuole sapere in anticipo quali cuccioli saranno idonei. Il codice iniziale divide puppies.csv, valuta un albero e legge il numero di alberi.

  1. Addestra una foresta con quel numero di alberi (random_state=0) e stampa la sua accuratezza sul test.
  2. Stampa quale modello vince e di quanto, oppure A tie.

Per un’altra scuola e con 50:

Single tree: 0.740
Forest: 0.860
The forest wins by 0.120

Prova poi 1: una foresta di un solo albero ha risultati sorprendentemente scarsi. La prossima lezione spiega perché.

Provalo tu

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier

# Cuccioli in una scuola per cani guida: calma, concentrazione e reazione ai rumori forti (da 1 a 10),
# peso, mesi trascorsi con la famiglia affidataria e idoneità come cane guida (1) o meno (0)
puppies = pd.read_csv("puppies.csv")
X = puppies[["calmness", "focus", "noise_startle", "weight_kg", "months_with_family"]]
y = puppies["qualified"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
trees = int(input())

# Non modificare le righe seguenti: un singolo albero da battere
tree = DecisionTreeClassifier(random_state=0)
tree.fit(X_train, y_train)
tree_acc = tree.score(X_test, y_test)
print(f"Single tree: {tree_acc:.3f}")

# 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