Leave-one-out kruisvalidatie in python (met voorbeelden)


Om de prestaties van een model op een dataset te evalueren, moeten we meten hoe goed de voorspellingen van het model overeenkomen met de waargenomen gegevens.

Een veelgebruikte methode om dit te doen staat bekend als Leave-One-Out Cross-Validation (LOOCV) , waarbij de volgende aanpak wordt gebruikt:

1. Splits een dataset op in een trainingsset en een testset, waarbij op één na alle observaties worden gebruikt als onderdeel van de trainingsset.

2. Maak een model met alleen gegevens uit de trainingsset.

3. Gebruik het model om de responswaarde te voorspellen van de waarneming die is uitgesloten van het model en bereken de gemiddelde kwadratische fout (MSE).

4. Herhaal dit proces n keer. Bereken de test-MSE als het gemiddelde van alle test-MSE’s.

Deze tutorial biedt een stapsgewijs voorbeeld van hoe u LOOCV voor een bepaald model in Python kunt uitvoeren.

Stap 1: Laad de benodigde bibliotheken

Eerst laden we de functies en bibliotheken die nodig zijn voor dit voorbeeld:

 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

Stap 2: Creëer de gegevens

Vervolgens maken we een Panda DataFrame dat twee voorspellende variabelen bevat, x1 en x2 , en een enkele responsvariabele 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]})

Stap 3: Voer een Leave-One-Out-kruisvalidatie uit

Vervolgens passen we een meervoudig lineair regressiemodel aan de dataset toe en voeren we LOOCV uit om de prestaties van het model te evalueren.

 #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

Uit het resultaat kunnen we zien dat de gemiddelde absolute fout (MAE) 3,146 was. Dat wil zeggen dat de gemiddelde absolute fout tussen de modelvoorspelling en de feitelijk waargenomen gegevens 3,146 bedraagt.

Over het algemeen geldt dat hoe lager de MAE, hoe beter een model feitelijke waarnemingen kan voorspellen.

Een andere veelgebruikte maatstaf om de prestaties van modellen te evalueren is de root mean square error (RMSE). De volgende code laat zien hoe u deze statistiek kunt berekenen met behulp van 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

Uit het resultaat kunnen we zien dat de root mean square error (RMSE) 3,619 was. Hoe lager de RMSE, hoe beter een model daadwerkelijke waarnemingen kan voorspellen.

In de praktijk passen we doorgaans verschillende modellen aan en vergelijken we de RMSE of MAE van elk model om te beslissen welk model de laagste testfoutpercentages oplevert en daarom het beste model is om te gebruiken.

Aanvullende bronnen

Een korte introductie tot Leave-One-Out Cross-Validation (LOOCV)
Een complete gids voor lineaire regressie in Python

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert