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:
La trappola: 15 piante di basilico, annaffiate in modo diverso, e tre curve adattate al loro raccolto:
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 173Il segno dell’overfitting: errore di addestramento piccolo, errore di test grande.
Sfida
MedioUn 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.
- 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. - Stampa il primo grado per cui l'errore di test è maggiore del doppio dell'errore di addestramento, oppure
No overfitting up to degreeemax_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 7Provalo 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
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Apprendimento supervisionato
1Il tuo primo modello
Imparare dagli esempiInsiemi di addestramento e testAdattare e prevedereValutare un modelloRiepilogo: Ordinatore di semi4Regressione logistica
Previsioni sì o noLa soglia decisionaleI pesi come evidenzePiù classiRiepilogo: filtro antispam7Sovraadattamento
Sottoadattamento e sovraadattamentoCurve di apprendimentoRegolarizzazioneSet di validazioneRiepilogo: ottimizzare un albero2Vicini più prossimi
Come decide k-NNScegliere kConfini decisionaliNormalizzare le scale per i viciniRiepilogo: vicini del vino5Misurare i classificatori
La matrice di confusionePrecisione e richiamoIl punteggio F1Classi sbilanciateCurve ROCRiepilogo: test di screening8Convalida incrociata
Validazione K-foldConfronto equo tra modelliRicerca a grigliaRiepilogo: riparazioni di skateboard11Progetto: specie di pinguini
Incontra i pinguiniPrepara i datiScegli un modelloOttimizza il miglioreDistribuisci il modello3Regressione lineare
Prevedere numeriPiù caratteristicheMisurare gli erroriGrafici dei residuiRiepilogo: noleggio di biciclette6Alberi decisionali
Gli alberi fanno domandeLeggere un alberoProfondità dell’alberoImportanza delle caratteristicheRiepilogo: decisioni sui prestitiEsercitati da solo: Compilatore Python online