Convalida incrociata k-fold in python (passo dopo passo)


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 convalida incrociata k-fold , che utilizza il seguente approccio:

1. Dividere casualmente un set di dati in k gruppi, o “pieghe”, di dimensioni approssimativamente uguali.

2. Scegli una delle pieghe come set di ritenuta. Adatta il modello alle restanti pieghe k-1. Calcolare il test MSE sulle osservazioni nello strato che è stato tensionato.

3. Ripetere questo processo k volte, ogni volta utilizzando un insieme diverso come insieme di esclusione.

4. Calcolare l’MSE complessivo del test come media dei k MSE del test.

Questo tutorial fornisce un esempio passo passo di come eseguire la convalida incrociata k-fold 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 KFold
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 K-Fold

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 = KFold ( n_splits = 10 , random_state = 1 , shuffle = True )

#build multiple linear regression model
model = LinearRegression()

#use k-fold CV 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.6141267491803646

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

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 = KFold ( n_splits = 5 , random_state = 1 , shuffle = True ) 

#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)))

4.284373111711816

Dal risultato, possiamo vedere che l’errore quadratico medio (RMSE) era 4.284 .

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.

Tieni inoltre presente che in questo esempio scegliamo di utilizzare k=5 pieghe, ma puoi scegliere qualsiasi numero di pieghe desideri.

In pratica, in genere scegliamo tra 5 e 10 strati, poiché questo risulta essere il numero ottimale di strati che produce tassi di errore di prova affidabili.

Puoi trovare la documentazione completa per la funzione KFold() di sklearn qui .

Risorse addizionali

Un’introduzione alla convalida incrociata K-Fold
Una guida completa alla regressione lineare in Python
Convalida incrociata Leave-One-Out in Python

Aggiungi un commento

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