Menu
CoddyTech

Grafici dei residui

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

Un buon punteggio può nascondere una forma errata. Questa retta ottiene un R quadrato di 0.82 su un impasto in lievitazione, eppure i suoi errori formano un arco:

A sinistra: altezza dell'impasto in funzione delle ore, aumenta rapidamente e poi rallenta, con una retta adattata, R quadrato 0.82. A destra: i residui rispetto alle previsioni salgono da -1.3 a +0.7 e tornano a -0.7, formando un arco attorno alla linea tratteggiata dello zero

Quel grafico a destra è un grafico dei residui: ogni residuo, valore effettivo meno valore previsto, rispetto alla sua previsione, sopra una linea a 0:

residuals = y_test - pred
fig, ax = plt.subplots()
ax.scatter(pred, residuals)
ax.axhline(0, color="gray", linestyle="--")
plt.show()

I residui corretti si distribuiscono casualmente intorno a 0. Un andamento indica che al modello sfugge qualcosa: in questo caso, che la crescita rallenta.

Con diverse caratteristiche, traccia anche i residui rispetto a ciascuna caratteristica: quella che forma un arco nasconde la curva.

challenge icon

Sfida

Medio

Una scuola guida ha adattato una retta a 80 test di frenata: speed_kmh e braking_m. Il codice iniziale mantiene le previsioni dei test in pred ed etichetta il grafico.

  1. Calcola i residui.
  2. Rappresentali con un grafico a dispersione rispetto alle previsioni, sopra una retta grigia tratteggiata a 0, poi visualizzalo.

La retta non riesce a cogliere una curva? A sinistra prevede addirittura una distanza di frenata negativa.

Il grafico di una retta valida, ottenuto da altri dati, ha questo aspetto:

Un grafico dei residui intitolato Una retta valida: venti punti sparsi senza alcuno schema sopra e sotto una retta tratteggiata a 0

Coddy descrive il tuo grafico.

Provalo tu

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

brakes = pd.read_csv("braking.csv")
X_train, X_test, y_train, y_test = train_test_split(brakes[["speed_kmh"]], brakes["braking_m"], test_size=0.25, random_state=0)
model = LinearRegression()
model.fit(X_train, y_train)
pred = model.predict(X_test)

fig, ax = plt.subplots()
ax.set_title("Braking Line Check")
ax.set_xlabel("Predicted braking distance (m)")
ax.set_ylabel("Residual (m)")

# 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