Jak zweryfikować krzyżowo wydajność modelu w r
W statystyce często budujemy modele z dwóch powodów:
- Zrozumieć związek pomiędzy jedną lub większą liczbą zmiennych predykcyjnych a zmienną odpowiedzi.
- Użyj modelu, aby przewidzieć przyszłe obserwacje.
Walidacja krzyżowa jest przydatna do oszacowania, jak dobrze model jest w stanie przewidzieć przyszłe obserwacje.
Na przykład możemy zbudować model regresji liniowej , który wykorzystuje wiek i dochód jako zmienne predykcyjne, a status domyślny jako zmienną odpowiedzi. W takim przypadku możemy chcieć dopasować model do zbioru danych, a następnie użyć tego modelu do przewidzenia, na podstawie dochodów i wieku nowego wnioskodawcy, prawdopodobieństwa, że nie spłaci on pożyczki.
Aby określić, czy model ma silne zdolności predykcyjne, musimy go użyć do przewidywania danych, których nigdy wcześniej nie widział. Pozwoli to oszacować błąd predykcji modelu.
Korzystanie z walidacji krzyżowej w celu oszacowania błędu przewidywania
Walidacja krzyżowa odnosi się do różnych sposobów szacowania błędu przewidywania. Ogólne podejście do walidacji krzyżowej jest następujące:
1. Odłóż na bok pewną liczbę obserwacji w zbiorze danych – zazwyczaj 15-25% wszystkich obserwacji.
2. Dopasuj (lub „wytrenuj”) model na obserwacjach, które przechowujemy w zbiorze danych.
3. Sprawdź, jak dobrze model może przewidywać obserwacje, których nie wykorzystaliśmy do uczenia modelu.
Pomiar jakości modelu
Kiedy używamy dopasowanego modelu do przewidywania nowych obserwacji, możemy użyć kilku różnych metryk do pomiaru jakości modelu, w tym:
Wielokrotne R-kwadrat: Mierzy siłę liniowej zależności między zmiennymi predykcyjnymi a zmienną odpowiedzi. R-kwadrat wielokrotności 1 wskazuje na idealną zależność liniową, podczas gdy R-kwadrat wielokrotności 0 oznacza brak zależności liniowej. Im wyższa wielokrotność R-kwadrat, tym większe prawdopodobieństwo, że zmienne predykcyjne przewidzą zmienną odpowiedzi.
Pierwiastek średniokwadratowy (RMSE): mierzy średni błąd przewidywania popełniany przez model podczas przewidywania wartości nowej obserwacji. Jest to średnia odległość pomiędzy prawdziwą wartością obserwacji a wartością przewidywaną przez model. Niższe wartości RMSE wskazują na lepsze dopasowanie modelu.
Średni błąd bezwzględny (MAE): Jest to średnia bezwzględna różnica między prawdziwą wartością obserwacji a wartością przewidywaną przez model. Metryka ta jest generalnie mniej wrażliwa na wartości odstające niż RMSE. Niższe wartości MAE wskazują na lepsze dopasowanie modelu.
Implementacja czterech różnych technik walidacji krzyżowej w R
Następnie wyjaśnimy, jak wdrożyć następujące techniki walidacji krzyżowej w R:
1. Podejście oparte na zestawie walidacyjnym
2. k-krotna walidacja krzyżowa
3. Odłóż na bok weryfikację krzyżową
4. Powtarzana k-krotna walidacja krzyżowa
Aby zilustrować, jak korzystać z tych różnych technik, użyjemy podzbioru wbudowanego zbioru danych R mtcars :
#define dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #view first six rows of new data head(data) # mpg disp hp drat #Mazda RX4 21.0 160 110 3.90 #Mazda RX4 Wag 21.0 160 110 3.90 #Datsun 710 22.8 108 93 3.85 #Hornet 4 Drive 21.4 258 110 3.08 #Hornet Sportabout 18.7 360 175 3.15 #Valiant 18.1 225 105 2.76
Zbudujemy model regresji liniowej, wykorzystując disp , hp i drat jako zmienne predykcyjne oraz mpg jako zmienną odpowiedzi.
Metoda zestawu walidacyjnego
Metoda zestawu walidacyjnego działa w następujący sposób:
1. Podziel dane na dwa zbiory: jeden służy do uczenia modelu (tj. szacowania parametrów modelu), a drugi do testowania modelu. Ogólnie rzecz biorąc, zbiór uczący jest generowany poprzez losowe wybranie 70–80% danych, a pozostałe 20–30% danych służy jako zbiór testowy.
2. Utwórz model, korzystając ze zbioru danych uczących.
3. Wykorzystaj model do przewidywania danych zbioru testowego.
4. Zmierz jakość modelu za pomocą wskaźników takich jak R-kwadrat, RMSE i MAE.
Przykład:
W poniższym przykładzie wykorzystano zbiór danych zdefiniowany powyżej. Najpierw dzielimy dane na
zbiór uczący i zbiór testowy, wykorzystując 80% danych jako zbiór uczący, a pozostałe 20% danych jako zbiór testowy. Następnie budujemy model korzystając ze zbioru uczącego. Następnie używamy modelu do przewidywania zbioru testowego. Na koniec mierzymy jakość modelu za pomocą kwadratu R, RMSE i MAE.
#load dplyr library used for data manipulation library(dplyr) #load caret library used for partitioning data into training and test set library(caret) #make this example reproducible set.seed(0) #define the dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #split the dataset into a training set (80%) and test set (20%). training_obs <- data$mpg %>% createDataPartition(p = 0.8, list = FALSE) train <- data[training_obs, ] test <- data[-training_obs, ] # Build the linear regression model on the training set model <- lm(mpg ~ ., data = train) # Use the model to make predictions on the test set predictions <- model %>% predict(test) #Examine R-squared, RMSE, and MAE of predictions data.frame(R_squared = R2(predictions, test$mpg), RMSE = RMSE(predictions, test$mpg), MAE = MAE(predictions, test$mpg)) #R_squared RMSE MAE #1 0.9213066 1.876038 1.66614
Porównując różne modele, preferowanym modelem jest ten, który daje najniższy RMSE w zestawie testowym.
Zalety i wady tego podejścia
Zaletą podejścia opartego na zbiorze walidacyjnym jest to, że jest proste i wydajne obliczeniowo. Wadą jest to, że model jest budowany przy użyciu tylko części wszystkich danych. Jeśli dane, które pominiemy w zbiorze uczącym, zawierają interesujące lub wartościowe informacje, model nie weźmie ich pod uwagę.
Metoda k-krotnej walidacji krzyżowej
Metoda k-krotnej walidacji krzyżowej działa w następujący sposób:
1. Losowo podziel dane na k „części” lub podzbiorów (na przykład 5 lub 10 podzbiorów).
2. Wytrenuj model na wszystkich danych, pomijając tylko jeden podzbiór.
3. Wykorzystaj model do przewidywania danych z pominiętego podzbioru.
4. Powtarzaj ten proces, aż każdy z k podzbiorów zostanie użyty jako zbiór testowy.
5 . Zmierz jakość modelu, uśredniając k błędów testu. To jest znane
jako błąd weryfikacji krzyżowej.
Przykład
W tym przykładzie najpierw dzielimy dane na 5 podzbiorów. Następnie dopasowujemy model, wykorzystując wszystkie dane oprócz podzbioru. Następnie używamy modelu do przewidywania pominiętego podzbioru i rejestrowania błędu testu (stosując R-kwadrat, RMSE i MAE). Powtarzamy ten proces, aż każdy podzbiór zostanie użyty jako zbiór testowy. Następnie po prostu obliczamy średnią z 5 błędów testowych.
#load dplyr library used for data manipulation library(dplyr) #load caret library used for partitioning data into training and test set library(caret) #make this example reproducible set.seed(0) #define the dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #define the number of subsets (or "folds") to use train_control <- trainControl(method = "cv", number = 5) #train the model model <- train(mpg ~ ., data = data, method = "lm", trControl = train_control) #Summarize the results print(model) #Linear Regression # #32 samples #3 predictor # #No pre-processing #Resampling: Cross-Validated (5 fold) #Summary of sample sizes: 26, 25, 26, 25, 26 #Resampling results: # # RMSE Rsquared MAE #3.095501 0.7661981 2.467427 # #Tuning parameter 'intercept' was held constant at a value of TRUE
Zalety i wady tego podejścia
Zaletą podejścia k-krotnej walidacji krzyżowej w porównaniu z podejściem zestawu walidacyjnego jest to, że buduje model kilka razy, używając za każdym razem różnych fragmentów danych, więc nie musimy ryzykować pominięcia ważnych danych podczas budowania modelu.
Subiektywną częścią tego podejścia jest wybór wartości k, czyli liczby podzbiorów, na które należy podzielić dane. Ogólnie rzecz biorąc, niższe wartości k prowadzą do większego obciążenia, ale mniejszej zmienności, podczas gdy wyższe wartości k prowadzą do mniejszego obciążenia, ale większej zmienności.
W praktyce k jest zwykle wybierane jako równe 5 lub 10, ponieważ taka liczba podzbiorów pozwala jednocześnie uniknąć zbyt dużego błędu systematycznego i zbyt dużej zmienności.
Podejście typu Leave One Out Cross-Validation (LOOCV).
Podejście LOOCV działa w następujący sposób:
1. Zbuduj model, wykorzystując wszystkie obserwacje ze zbioru danych z wyjątkiem jednej.
2. Wykorzystaj model do przewidzenia wartości brakującej obserwacji. Zapisz błąd podczas testowania tej prognozy.
3. Powtórz ten proces dla każdej obserwacji w zbiorze danych.
4. Zmierz jakość modelu poprzez uśrednienie wszystkich błędów predykcji.
Przykład
Poniższy przykład ilustruje sposób użycia perform LOOCV dla tego samego zbioru danych, co w poprzednich przykładach:
#load dplyr library used for data manipulation library(dplyr) #load caret library used for partitioning data into training and test set library(caret) #make this example reproducible set.seed(0) #define the dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #specify that we want to use LOOCV train_control <- trainControl( method = "LOOCV" ) #train the model model <- train(mpg ~ ., data = data, method = "lm", trControl = train_control) #summarize the results print(model) #Linear Regression # #32 samples #3 predictor # #No pre-processing #Resampling: Leave-One-Out Cross-Validation #Summary of sample sizes: 31, 31, 31, 31, 31, 31, ... #Resampling results: # # RMSE Rsquared MAE #3.168763 0.7170704 2.503544 # #Tuning parameter 'intercept' was held constant at a value of TRUE
Zalety i wady tego podejścia
Zaletą LOOCV jest to, że wykorzystujemy wszystkie punkty danych, co ogólnie zmniejsza potencjalne obciążenie. Ponieważ jednak używamy modelu do przewidywania wartości każdej obserwacji, może to prowadzić do większej zmienności błędu przewidywania.
Inną wadą tego podejścia jest to, że musi pasować do tak dużej liczby modeli, że może stać się nieefektywne i wymagające obliczeniowo.
Metoda powtarzanej k-krotnej walidacji krzyżowej
Możemy przeprowadzić wielokrotną k-krotną weryfikację krzyżową, po prostu wielokrotną k-krotną walidację krzyżową. Błąd końcowy to średni błąd liczby powtórzeń.
Poniższy przykład przeprowadza 5-krotną weryfikację krzyżową, powtórzoną 4 razy:
#load dplyr library used for data manipulation library(dplyr) #load caret library used for partitioning data into training and test set library(caret) #make this example reproducible set.seed(0) #define the dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #define the number of subsets to use and number of times to repeat k-fold CV train_control <- trainControl(method = "repeatedcv", number = 5, repeats = 4 ) #train the model model <- train(mpg ~ ., data = data, method = "lm", trControl = train_control) #summarize the results print(model) #Linear Regression # #32 samples #3 predictor # #No pre-processing #Resampling: Cross-Validated (5 fold, repeated 4 times) #Summary of sample sizes: 26, 25, 26, 25, 26, 25, ... #Resampling results: # # RMSE Rsquared MAE #3.176339 0.7909337 2.559131 # #Tuning parameter 'intercept' was held constant at a value of TRUE
Zalety i wady tego podejścia
Zaletą podejścia polegającego na powtarzanej k-krotnej walidacji krzyżowej jest to, że przy każdym powtórzeniu dane zostaną podzielone na nieco inne podzbiory, co powinno dać jeszcze bardziej obiektywne oszacowanie błędu przewidywania modelu. Wadą tego podejścia jest to, że może być wymagające obliczeniowo, ponieważ musimy kilkakrotnie powtarzać proces dopasowywania modelu.
Jak wybrać liczbę fałd w walidacji krzyżowej
Najbardziej subiektywną częścią walidacji krzyżowej jest podjęcie decyzji, ile fałd (tj. podzbiorów) zastosować. Ogólnie rzecz biorąc, im mniejsza liczba fałd, tym bardziej obciążone są szacunki błędów, ale będą one mniej zmienne. I odwrotnie, im większa liczba fałd, tym mniej obciążone są szacunki błędów, ale będą one bardziej zmienne.
Ważne jest również, aby pamiętać o czasie obliczeń. Dla każdego zagięcia będziesz musiał wytrenować nowy wzór i choć jest to powolny proces, może zająć dużo czasu, jeśli wybierzesz dużą liczbę zagięć.
W praktyce weryfikację krzyżową zwykle przeprowadza się 5 lub 10 razy, ponieważ zapewnia to dobrą równowagę między zmiennością a obciążeniem, a jednocześnie jest wydajne obliczeniowo.
Jak wybrać model po przeprowadzeniu walidacji krzyżowej
Walidacja krzyżowa służy do oceny błędu przewidywania modelu. Może to pomóc nam wybrać pomiędzy dwoma lub większą liczbą różnych modeli poprzez podkreślenie, który model ma najniższy błąd przewidywania (w oparciu o RMSE, R-kwadrat itp.).
Po zastosowaniu walidacji krzyżowej w celu wybrania najlepszego modelu wykorzystujemy wszystkie dostępne dane, aby dopasować go do wybranego modelu. W przypadku naszego ostatecznego modelu nie używamy rzeczywistych instancji modelu, które przeszkoliliśmy podczas weryfikacji krzyżowej.
Na przykład możemy zastosować 5-krotną weryfikację krzyżową, aby określić, który model lepiej zastosować między dwoma różnymi modelami regresji. Jednak gdy już ustalimy, który model jest najlepszy, wykorzystujemy wszystkie dane, aby dopasować model ostateczny. Innymi słowy, budując ostateczny model, nie zapominamy o żadnym fałdzie.