Convalida incrociata leave-one-out in python (con esempi)


Per valutare le prestazioni di un modello su un set di dati, dobbiamo misurare quanto bene le previsioni fatte dal modello corrispondono ai dati osservati.

Un metodo comunemente utilizzato per eseguire questa operazione è noto come Leave-One-Out Cross-Validation (LOOCV) , che utilizza il seguente approccio:

1. Suddividere un set di dati in un set di training e in un set di test, utilizzando tutte le osservazioni tranne una come parte del set di training.

2. Crea un modello utilizzando solo i dati del set di training.

3. Utilizzare il modello per prevedere il valore di risposta dell’osservazione esclusa dal modello e calcolare l’errore quadratico medio (MSE).

4. Ripeti questo processo n volte. Calcolare l’MSE del test come media di tutti gli MSE del test.

Questo tutorial fornisce un esempio passo passo di come eseguire LOOCV per un determinato modello in Python.

Passaggio 1: caricare le librerie necessarie

Innanzitutto, caricheremo le funzioni e le librerie necessarie per questo esempio:

 from sklearn. model_selection import train_test_split
from sklearn. model_selection import LeaveOneOut
from sklearn. model_selection import cross_val_score
from sklearn. linear_model import LinearRegression
from numpy import means
from numpy import absolute
from numpy import sqrt
import pandas as pd

Passaggio 2: creare i dati

Successivamente, creeremo un DataFrame panda che contiene due variabili predittive, x1 e x2 e una singola variabile di risposta y.

 df = pd.DataFrame({' y ': [6, 8, 12, 14, 14, 15, 17, 22, 24, 23],
                   ' x1 ': [2, 5, 4, 3, 4, 6, 7, 5, 8, 9],
                   ' x2 ': [14, 12, 12, 13, 7, 8, 7, 4, 6, 5]})

Passaggio 3: eseguire la convalida incrociata Leave-One-Out

Successivamente, adatteremo un modello di regressione lineare multipla al set di dati ed eseguiremo LOOCV per valutare le prestazioni del modello.

 #define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']

#define cross-validation method to use
cv = LeaveOneOut()

#build multiple linear regression model
model = LinearRegression()

#use LOOCV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_absolute_error ',
                         cv=cv, n_jobs=-1)

#view mean absolute error
mean(absolute(scores))

3.1461548083469726

Dal risultato, possiamo vedere che l’errore medio assoluto (MAE) era 3,146 . Cioè, l’errore assoluto medio tra la previsione del modello e i dati effettivamente osservati è 3,146.

In generale, più basso è il MAE, migliore è la capacità del modello di prevedere le osservazioni reali.

Un altro parametro comunemente utilizzato per valutare le prestazioni del modello è l’errore quadratico medio (RMSE). Il codice seguente mostra come calcolare questa metrica utilizzando LOOCV:

 #define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']

#define cross-validation method to use
cv = LeaveOneOut()

#build multiple linear regression model
model = LinearRegression()

#use LOOCV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_squared_error ',
                         cv=cv, n_jobs=-1)

#view RMSE
sqrt(mean(absolute(scores)))

3.619456476385567

Dal risultato, possiamo vedere che l’errore quadratico medio (RMSE) era 3,619 . Più basso è l’RMSE, migliore è la capacità del modello di prevedere le osservazioni reali.

In pratica, in genere adattiamo diversi modelli diversi e confrontiamo l’RMSE o il MAE di ciascun modello per decidere quale modello produce i tassi di errore di test più bassi ed è quindi il modello migliore da utilizzare.

Risorse addizionali

Una rapida introduzione alla convalida incrociata Leave-One-Out (LOOCV)
Una guida completa alla regressione lineare in Python

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *