Menu
CoddyTech

Misurare gli errori

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

Di quanto sbaglia un modello, in dollari? Ecco un modello dei prezzi delle case su cinque case di prova che non aveva mai visto:

Cinque barre, una per ogni casa di prova, indicano l’entità dell’errore del modello dei prezzi: 20, 40, 10, 90 e 30 mila dollari. Una linea tratteggiata indica il MAE a 38, una linea puntinata l’RMSE a 47.1, più in alto a causa dell’unico grande errore di 90

sklearn.metrics misura gli errori per te:

from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score

y_test = np.array([290, 410, 235, 520, 330])  # migliaia di dollari
pred = np.array([270, 450, 245, 430, 360])
print(mean_absolute_error(y_test, pred))
print(np.round(np.sqrt(mean_squared_error(y_test, pred)), 1))
print(np.round(r2_score(y_test, pred), 3))

Questo stampa:

38.0
47.1
0.776

Il MAE, errore assoluto medio, è lo scarto tipico: 38 mila. L’RMSE eleva al quadrato gli scarti, ne calcola la media e poi la radice: un singolo grande scarto lo porta a 47.

Entrambi usano le unità della variabile target. r2_score è il tuo R quadrato: il 78% della variabilità dei prezzi è spiegato.

challenge icon

Sfida

Medio

Un negozio stabilisce i prezzi delle fotocamere usate con un modello. Una seconda caratteristica è utile? Il programma legge shutter_k (migliaia di scatti) oppure megapixels. Il codice iniziale addestra due modelli, uno solo su age_years e l’altro insieme alla caratteristica aggiuntiva, memorizzando le previsioni sui dati di test in preds.

  1. Per ogni modello, stampa MAE, RMSE (1 decimale) e R quadrato (3 decimali).
  2. Stampa quello con il MAE più piccolo.

Per un altro negozio e shutter_k:

age_years: MAE 212.4, RMSE 268.1, R squared 0.853
age_years + shutter_k: MAE 98.7, RMSE 121.0, R squared 0.97
Better: age_years + shutter_k, off by 98.7 dollars on a typical camera

Provalo tu

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# Una riga per ogni fotocamera venduta: età, numero di scatti dell'otturatore in migliaia, megapixel, prezzo in dollari
cameras = pd.read_csv("cameras.csv")
extra = input()
names = ["age_years", "age_years + " + extra]
columns = [["age_years"], ["age_years", extra]]
# Suddividi le righe intere; ogni modello qui sotto seleziona le proprie colonne
X_train, X_test, y_train, y_test = train_test_split(cameras, cameras["price"], test_size=0.25, random_state=0)
# Un modello per ogni elenco di colonne, con le relative previsioni per le fotocamere di test
preds = []
for cols in columns:
    model = LinearRegression()
    model.fit(X_train[cols], y_train)
    preds.append(model.predict(X_test[cols]))

# 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