Contenuti del Corso
Regressione Lineare con Python
Regressione Lineare con Python
Overfitting
Overfitting
Considera le due linee di regressione qui sotto. Quale delle due è migliore?
Secondo le metriche, la seconda è migliore. Quindi la useremo per prevedere nuovi valori! Abbiamo bisogno delle previsioni per X_new = [0.2,0.5,2.7]
. Tuttavia, quando abbiamo ottenuto i valori target reali per gli X_new
appena previsti, si è scoperto che il primo modello aveva una previsione molto migliore.
Questo accade perché il secondo modello overfitta il set di addestramento. Overfitting si verifica quando il modello costruito è troppo complesso e si adatta perfettamente ai dati di addestramento, ma non riesce a prevedere altre istanze non viste altrettanto bene.
Underfitting
Esiste anche un altro concetto, underfitting. Si verifica quando il modello costruito è troppo semplice e non riesce nemmeno ad adattarsi bene ai dati di addestramento. In questi casi, anche le previsioni delle istanze non viste risultano errate.
È possibile cercare di capire se il modello presenta underfitting o overfitting anche visivamente.
Sappiamo già che non è possibile visualizzare la Regressione Lineare Multipla con molte variabili. Esiste un altro modo per capire se il modello presenta overfitting o underfitting? In effetti, esiste.
Suddivisione Train-Test
Vogliamo sapere come il modello si comporterà su istanze mai viste. Per questo, abbiamo bisogno di istanze non viste con i veri valori target. E abbiamo i veri valori target solo nel set di addestramento. Il metodo corretto consiste nel suddividere il set di addestramento in due insiemi: un set di addestramento e un set di test.
Ora possiamo costruire il modello utilizzando il set di addestramento, calcolare le metriche sul set di addestramento (istanze viste) e poi calcolare le metriche sul set di test (istanze non viste).
È fondamentale suddividere il set di addestramento in modo casuale. Solitamente, si utilizza circa il 20-30% del set di addestramento come set di test, mentre il restante 70-80% viene lasciato come set di addestramento. Scikit-learn fornisce una funzione semplice per suddividere casualmente il set:
Ad esempio, per suddividere il set di addestramento in 70% addestramento/30% test, puoi utilizzare il seguente codice:
from sklearn.model_selection import train_test_split # import the function
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
Grazie per i tuoi commenti!