Menu
CoddyTech

Sottoadattamento e sovraadattamento

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

Hai incontrato la trappola più grande del machine learning: k = 1 e gli alberi profondi memorizzati. Questo capitolo le dà un nome e si conclude con grafici come questo:

Accuratezza di addestramento e convalida di un albero in base alla profondità: quella di addestramento sale verso 1.0, quella di convalida raggiunge il picco alla profondità 3 e poi cala. Una linea tratteggiata indica la profondità scelta, una stella rossa il suo unico punteggio di test, 0.82

La trappola: 15 piante di basilico, annaffiate in modo diverso, e tre curve adattate al loro raccolto:

Raccolti di foglie di 15 piante di addestramento rappresentati da punti grigi e di 5 piante di test rappresentati da quadrati neri, in funzione dell'acqua giornaliera. Una retta blu non segue il rialzo, una curva verde di grado 3 lo segue, una curva rossa di grado 12 oscilla selvaggiamente tra i punti

Il grado 1 è troppo semplice: underfitting. Il grado 12 passa per ogni punto di training, oscillando tra di essi: overfitting, memorizzazione, non apprendimento.

np.polyval(coefs, x) restituisce le altezze di una curva. RMSE di addestramento e test, in grammi:

for degree in [1, 3, 12]:
    coefs = np.polyfit(water_train, grams_train, degree)
    train_err = np.sqrt(mean_squared_error(grams_train, np.polyval(coefs, water_train)))
    test_err = np.sqrt(mean_squared_error(grams_test, np.polyval(coefs, water_test)))
    print(degree, round(train_err), round(test_err))

Stampa:

1 156 138
3 15 19
12 9 173

Il segno dell’overfitting: errore di addestramento piccolo, errore di test grande.

challenge icon

Sfida

Medio

Un parco eolico modella la potenza di una turbina in base alla velocità del vento. Il codice iniziale suddivide le sue 24 misurazioni e legge max_degree.

  1. Per ogni grado da 1 a max_degree, adatta una curva ai dati di addestramento; stampa l'RMSE di addestramento e di test in kW interi.
  2. Stampa il primo grado per cui l'errore di test è maggiore del doppio dell'errore di addestramento, oppure No overfitting up to degree e max_degree.

Per un'altra turbina e 7:

Degree 1: train 117 kW, test 172 kW
Degree 2: train 115 kW, test 182 kW
Degree 3: train 64 kW, test 85 kW
Degree 4: train 63 kW, test 79 kW
Degree 5: train 47 kW, test 67 kW
Degree 6: train 47 kW, test 65 kW
Degree 7: train 23 kW, test 85 kW
Overfitting starts at degree 7

Provalo tu

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

max_degree = int(input())

# Non modificare le righe seguenti: velocità del vento (m/s) e potenza (kW) di una turbina eolica
speed = np.array([3.8, 4.3, 5.1, 5.6, 5.6, 6.7, 6.8, 7.2, 7.8, 8.5, 8.9, 9.1,
                  10.2, 10.9, 11.4, 11.9, 12.2, 12.4, 12.6, 13.2, 13.9, 14.4, 15.5, 16.5])
power = np.array([0, 85, 179, 22, 17, 126, 255, 273, 419, 545, 612, 665,
                  913, 1120, 1114, 1227, 1299, 1400, 1293, 1329, 1396, 1493, 1461, 1552])
speed_train, speed_test, power_train, power_test = train_test_split(
    speed, power, test_size=0.25, random_state=0)

# 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