Walidacja krzyżowa leave-one-out w pythonie (z przykładami)


Aby ocenić wydajność modelu na zbiorze danych, musimy zmierzyć, jak dobrze przewidywania dokonane przez model odpowiadają obserwowanym danym.

Powszechnie stosowaną metodą jest weryfikacja krzyżowa Leave-One-Out (LOOCV) , która wykorzystuje następujące podejście:

1. Podziel zbiór danych na zbiór uczący i testowy, wykorzystując wszystkie obserwacje z wyjątkiem jednej jako część zbioru uczącego.

2. Utwórz model wykorzystując wyłącznie dane ze zbioru uczącego.

3. Wykorzystać model do przewidzenia wartości odpowiedzi obserwacji wyłączonej z modelu i obliczyć błąd średniokwadratowy (MSE).

4. Powtórz ten proces n razy. Oblicz testowe MSE jako średnią ze wszystkich testowych MSE.

Ten samouczek zawiera przykładowy krok po kroku sposób uruchomienia LOOCV dla danego modelu w języku Python.

Krok 1: Załaduj niezbędne biblioteki

Najpierw załadujemy funkcje i biblioteki potrzebne w tym przykładzie:

 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

Krok 2: Utwórz dane

Następnie utworzymy ramkę danych pandy zawierającą dwie zmienne predykcyjne, x1 i x2 , oraz jedną zmienną odpowiedzi 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]})

Krok 3: Wykonaj weryfikację krzyżową typu Leave-One-Out

Następnie dopasujemy model regresji liniowej do zbioru danych i wykonamy LOOCV, aby ocenić wydajność modelu.

 #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

Z wyniku widzimy, że średni błąd bezwzględny (MAE) wyniósł 3,146 . Oznacza to, że średni błąd bezwzględny pomiędzy przewidywaniem modelu a danymi faktycznie zaobserwowanymi wynosi 3,146.

Ogólnie rzecz biorąc, im niższy MAE, tym lepiej model jest w stanie przewidzieć rzeczywiste obserwacje.

Inną powszechnie używaną metryką do oceny wydajności modelu jest średni błąd kwadratowy (RMSE). Poniższy kod pokazuje, jak obliczyć tę metrykę za pomocą 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

Z wyniku widzimy, że średni błąd kwadratowy (RMSE) wyniósł 3,619 . Im niższy RMSE, tym lepiej model jest w stanie przewidzieć rzeczywiste obserwacje.

W praktyce zazwyczaj dopasowujemy kilka różnych modeli i porównujemy RMSE lub MAE każdego modelu, aby zdecydować, który model daje najniższy poziom błędów testowych i dlatego jest najlepszym modelem do zastosowania.

Dodatkowe zasoby

Szybkie wprowadzenie do walidacji krzyżowej typu Leave-One-Out (LOOCV)
Kompletny przewodnik po regresji liniowej w Pythonie

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *