Szybkie wprowadzenie do walidacji krzyżowej typu leave-one-out (loocv)
Aby ocenić wydajność modelu na zbiorze danych, musimy zmierzyć, jak dobrze przewidywania dokonane przez model odpowiadają obserwowanym danym.
Najczęstszym sposobem pomiaru tego jest użycie błędu średniokwadratowego (MSE), który oblicza się w następujący sposób:
MSE = (1/n)*Σ(y i – f(x i )) 2
Złoto:
- n: całkowita liczba obserwacji
- y i : Wartość odpowiedzi i -tej obserwacji
- f(x i ): Przewidywana wartość odpowiedzi i- tej obserwacji
Im bardziej prognozy modelu będą zbliżone do obserwacji, tym niższy będzie MSE.
W praktyce do obliczenia MSE danego modelu stosujemy następujący proces:
1. Podziel zbiór danych na zbiór uczący i zbiór testowy.
2. Utwórz model wykorzystując wyłącznie dane ze zbioru uczącego.
3. Wykorzystaj model do przewidywania zbioru testowego i zmierz MSE – nazywa się to testowym MSE .
Testowanie MSE daje nam wyobrażenie o tym, jak dobrze model radzi sobie na danych, których wcześniej nie widział, czyli takich, które nie zostały użyte do „uczenia” modelu.
Jednak wadą stosowania pojedynczego zbioru testowego jest to, że test MSE może znacznie się różnić w zależności od obserwacji zastosowanych w zbiorze uczącym i testowym.
Możliwe, że jeśli zastosujemy inny zestaw obserwacji dla zbioru uczącego i zbioru testowego, to nasze testowe MSE może okazać się znacznie większe lub mniejsze.
Jednym ze sposobów uniknięcia tego problemu jest wielokrotne dopasowanie modelu przy użyciu za każdym razem innego zbioru uczącego i testowego, a następnie obliczenie testowego MSE jako średniej wszystkich testowych MSE.
Ta ogólna metoda znana jest jako walidacja krzyżowa, a jej konkretna forma jest znana jako walidacja krzyżowa Leave-One-Out .
Walidacja krzyżowa typu Leave-One-Out
Weryfikacja krzyżowa typu „pomiń jeden” wykorzystuje następujące podejście do oceny modelu:
1. Podziel zbiór danych na zbiór uczący i testowy, wykorzystując wszystkie obserwacje oprócz jednej jako część zbioru uczącego:
Należy pamiętać, że pozostawiamy tylko jedną obserwację „poza” zbiorem uczącym. W tym miejscu metoda otrzymuje nazwę sprawdzania krzyżowego „pomiń jeden”.
2. Utwórz model wykorzystując wyłącznie dane ze zbioru uczącego.
3. Wykorzystaj model do przewidzenia wartości odpowiedzi pojedynczej obserwacji wyłączonej z modelu i oblicz MSE.
4. Powtórz proces n razy.
Na koniec powtarzamy ten proces n razy (gdzie n to całkowita liczba obserwacji w zbiorze danych), za każdym razem pomijając inną obserwację ze zbioru uczącego.
Następnie obliczamy testowe MSE jako średnią wszystkich testowych MSE:
Test MSE = (1/n)*ΣMSE tj
Złoto:
- n: całkowita liczba obserwacji w zbiorze danych
- MSEi: test MSE podczas i-tego okresu dopasowywania modelu.
Zalety i wady LOOCV
Walidacja krzyżowa typu „leave-one-out” zapewnia następujące korzyści :
- Zapewnia znacznie mniej obciążony pomiar testu MSE w porównaniu z użyciem pojedynczego zestawu testów, ponieważ wielokrotnie dopasowujemy model do zbioru danych zawierającego obserwacje n-1 .
- Zwykle nie przecenia MSE testu w porównaniu z użyciem pojedynczego zestawu testowego.
Jednakże weryfikacja krzyżowa bez użycia rąk ma następujące wady:
- Korzystanie z tego procesu może zająć dużo czasu, gdy n jest duże.
- Może to być również czasochłonne, jeśli model jest szczególnie złożony i dopasowanie zestawu danych zajmuje dużo czasu.
- Może to być kosztowne obliczeniowo.
Na szczęście współczesne obliczenia stały się tak wydajne w większości obszarów, że LOOCV jest metodą znacznie rozsądniejszą w użyciu niż wiele lat temu.
Należy pamiętać, że LOOCV można również stosować w kontekście regresji i klasyfikacji . W przypadku problemów regresyjnych oblicza test MSE jako średnią kwadratową różnicy między przewidywaniami i obserwacjami, natomiast w przypadku problemów klasyfikacyjnych oblicza test MSE jako procent obserwacji poprawnie sklasyfikowanych w ciągu n wielokrotnych korekt modelu.
Jak uruchomić LOOCV w R i Pythonie
Poniższe tutoriale zawierają przykłady krok po kroku uruchomienia LOOCV dla danego modelu w R i Pythonie:
Walidacja krzyżowa typu Leave-One-Out w R
Walidacja krzyżowa typu Leave-One-Out w Pythonie