Próbuję dowiedzieć się, która metoda weryfikacji krzyżowej jest najlepsza w mojej sytuacji.
Poniższe dane są tylko przykładem pracy nad problemem (w R), ale moje rzeczywiste X
dane ( xmat
) są skorelowane ze sobą i skorelowane w różnym stopniu ze y
zmienną ( ymat
). Podałem kod R, ale moje pytanie nie dotyczy R, ale metod. Xmat
obejmuje zmienne X od V1 do V100, podczas gdy ymat
zawiera jedną zmienną y.
set.seed(1233)
xmat <- matrix(sample(-1:1, 20000, replace = TRUE), ncol = 100)
colnames(xmat) <- paste("V", 1:100, sep ="")
rownames(xmat) <- paste("S", 1:200, sep ="")
# the real y data are correlated with xmat
ymat <- matrix(rnorm(200, 70,20), ncol = 1)
rownames(ymat) <- paste("S", 1:200, sep="")
Chciałbym zbudować model przewidywania y
oparty na wszystkich zmiennych w xmat
. Będzie to więc model regresji liniowej y ~ V1 + V2 + V3+ ... + V100
. Z recenzji widzę następujące trzy metody weryfikacji krzyżowej:
Podziel dane na około połowę i wykorzystaj jedną do szkolenia, a drugą do testowania (walidacja krzyżowa):
prop <- 0.5 # proportion of subset data set.seed(1234) # training data set training.s <- sample (1:nrow(xmat), round(prop*nrow(xmat),0)) xmat.train <- xmat[training.s,] ymat.train <- ymat[training.s,] # testing data set testing.s <- setdiff(1:nrow(xmat), training) xmat.test <- xmat[testing.s,] ymat.test <- ymat[testing.s,]
Walidacja krzyżowa K-krotnie - przy użyciu 10-krotnej walidacji krzyżowej:
mydata <- data.frame(ymat, xmat) fit <- lm(ymat ~ ., data=mydata) library(DAAG) cv.lm(df=mydata, fit, m=10) # ten-fold cross validation
Maskowanie jednej wartości lub kilku wartości naraz : W tej metodzie losowo maskujemy wartość w zbiorze danych (y), zastępując ją NA i przewidujemy. Proces powtarza się n razy.
n = 500 predicted.v <- rep(NA, n) real.v <- rep(NA, n) for (i in 1:n){ masked.id <- sample (1:nrow(xmat), 1) ymat1 <- ymat real.v[i] <- ymat[masked.id,] ymat1[masked.id,] <- NA mydata <- data.frame(ymat1, xmat) fit <- lm(ymat1 ~ ., data=mydata) predicted.v[i] <- fit$fitted.values[masked.id] }
Skąd mam wiedzieć, który jest najlepszy w każdej sytuacji? Czy są inne metody? Bootstrap validation
kontra CV
? Docenione przykłady będą mile widziane.
źródło
Odpowiedzi:
Ponieważ PO naliczył nagrodę za to pytanie, powinien zwrócić na siebie uwagę, a zatem jest właściwym miejscem do dyskusji na temat ogólnych pomysłów, nawet jeśli nie udzieli bezpośredniej odpowiedzi na PO.
Imiona:
a) walidacja krzyżowa to ogólna nazwa wszystkich technik szacowania / pomiaru, które wykorzystują zestaw testowy inny niż zestaw pociągu. Synonim: szacunki poza próbą lub poza próbą. Antonim: oszacowanie w próbie.
Oszacowanie w próbie to techniki, które wykorzystują pewne informacje o zestawie szkoleniowym do oszacowania jakości modelu (niekoniecznie błąd). Jest to bardzo częste, jeśli model ma duże odchylenie - to znaczy - opiera się na silnych założeniach dotyczących danych. W modelach liniowych (model o dużym odchyleniu), tak jak w przykładzie pytania, jako miarę jakości modelu stosuje się R-kwadrat, AIC, BIC, dewiację - wszystko to są estymatory w próbie. Na przykład w SVM dane o stosunku w wektorze pomocniczym do liczby danych to oszacowanie błędu modelu w próbie.
Istnieje wiele technik krzyżowej weryfikacji:
b) wstrzymanie jest metodą nr 1 powyżej. Podziel zestaw na trening i jeden test. Długa historia dyskusji i praktyk dotyczących względnych rozmiarów zestawu szkoleniowego i testowego.
c) k- fold - metoda nr 2 powyżej. Dość standardowy.
d) Leave-one-out - metoda nr 3 powyżej.
e) bootstrap : jeśli twój zestaw ma N danych, losowo wybierz N próbek Z WYMIANY i użyj go jako treningu. Dane z oryginalnego zestawu, które nie były próbkami, są wykorzystywane jako zestaw testowy. Istnieją różne sposoby obliczenia ostatecznego oszacowania błędu modelu, który wykorzystuje zarówno błąd zestawu testowego (poza próbą), jak i błąd zestawu pociągu (w próbie). Zobacz na przykład bootstrap .632. Myślę, że istnieje również formuła .632+ - są to formuły, które szacują prawdziwy błąd modelu przy użyciu błędów zarówno poza próbą, jak i w próbie.
f) Ortogonalnym względem wyboru powyższej metody jest kwestia powtórzeń. Z wyjątkiem pominięcia, wszystkie powyższe metody można powtórzyć dowolną liczbę razy. W rzeczywistości można mówić o POWTARZANIU blokowania lub POWTARZANIU k- fold. Szczerze mówiąc, prawie zawsze metoda ładowania początkowego jest używana w powtarzalny sposób.
Kolejne pytanie brzmi, która metoda jest „lepsza”. Problem polega na tym, co znaczy „lepszy”.
1) Pierwsza odpowiedź brzmi, czy każda z tych metod jest tendencyjna do oszacowania błędu modelu (dla nieskończonej ilości przyszłych danych).
2) Drugą alternatywą jest to, jak szybko lub jak dobrze każda z tych metod zbiega się z błędem prawdziwego modelu (jeśli nie są stronnicze). Uważam, że wciąż jest to temat badań. Wskażę te dwa artykuły (za ścianą płatniczą), ale streszczenie pozwala nam zrozumieć, co starają się osiągnąć. Zauważ też, że bardzo często wywoływane jest k- fold jako „cross-validation”.
Pomiar błędu prognozy. Porównanie metod weryfikacji krzyżowej, bootstrap i kowariancji
Oszacowanie poziomu błędu klasyfikacji: powtarzana walidacja krzyżowa, powtarzane wstrzymanie i bootstrap
Prawdopodobnie istnieje wiele innych artykułów na te tematy. To tylko niektóre przykłady.
3) Kolejnym aspektem „lepszego” jest: biorąc pod uwagę konkretną miarę błędu modelu przy użyciu jednej z powyższych technik, czy można być pewnym, że prawidłowy błąd modelu jest bliski.
Ogólnie rzecz biorąc, w tym przypadku chcesz podjąć wiele pomiarów błędu i obliczyć przedział ufności (lub wiarygodny przedział, jeśli zastosujesz podejście bayesowskie). W tym przypadku problemem jest to, na ile można ufać wariancji zestawu miar błędów. Zauważ, że oprócz pominięcia , wszystkie powyższe techniki dadzą ci wiele różnych miar ( k miar dla k- fold, n miar dla n- powtarzanego wstrzymania), a zatem możesz zmierzyć wariancję (lub odchylenie standardowe ) tego zestawu i obliczyć przedział ufności dla miary błędu.
Tutaj sprawy się komplikują. Z tego, co rozumiem z artykułu Bez obiektywnego estymatora wariancji krzyżowej walidacji k -fold (nie za paywall), nie można ufać wariancji otrzymanej z k- fold - więc nie można zbudować dobrego przedziału ufności z k - marszczenie. Również z tego, co rozumiem z artykułu Przybliżone testy statystyczne do porównywania nadzorowanych algorytmów uczenia się klasyfikacji (nie za zaporą), techniki wykorzystujące powtarzane miary (powtarzane k-fold, powtarzane wstrzymanie - nie jestem pewien co do bootstrap) nie oszacuje prawdziwej wariancji miary błędu (dość łatwo to zauważyć - ponieważ próbujesz ze zbioru skończonego, jeśli powtórzysz takt bardzo dużą liczbę razy te same wartości będą się powtarzać, co utrzyma średnią tę samą, ale zmniejszy wariancję). Zatem techniki powtarzanych pomiarów będą zbyt optymistyczne w odniesieniu do przedziału ufności.
Ten ostatni artykuł sugeruje wykonanie 5 powtórzeń 2-krotnie - które nazywa CV 5 × 2 - jako dobrą równowagę wielu taktów (10), ale nie za dużo powtórzeń.
EDYTOWAĆ:
Oczywiście istnieją świetne odpowiedzi w Cross Validated na niektóre z tych pytań (chociaż czasami nie są ze sobą zgodne). Oto niektóre:
Cross-validation lub bootstrapping w celu oceny wydajności klasyfikacji?
Różnice między walidacją krzyżową a ładowaniem początkowym w celu oszacowania błędu prognozowania
Cross-validation lub bootstrapping w celu oceny wydajności klasyfikacji?
Opis ładowania początkowego do sprawdzania poprawności i wyboru modelu
Ogólnie rzecz biorąc, sprawdzanie poprawności tagu jest tutaj Twoim przyjacielem.
Jakie jest najlepsze rozwiązanie? Nie wiem Używam CV 5 × 2, kiedy muszę być bardzo rygorystyczny, kiedy muszę mieć pewność, że jedna technika jest lepsza od drugiej, szczególnie w publikacjach. I używam blokady, jeśli nie planuję dokonywać pomiaru wariancji lub odchylenia standardowego, lub jeśli mam ograniczenia czasowe - w blokadzie jest tylko jeden model uczenia się .
źródło
Proszę odnieść się do strony wikipedia dla definicji metody (robią o wiele lepiej, niż mogłem zrobić tutaj).
Po przejrzeniu tej strony pomocne mogą być następujące informacje. Pozwól, że skupię się na tej części pytania, w której chce się wybrać jedną z tych metod do procesu modelowania. Ponieważ jest to dość częsty wybór, który można podjąć i mogliby skorzystać z dodatkowej wiedzy, oto moja odpowiedź na dwie sytuacje:
Każda sytuacja : użyj
k-fold cross validation
z odpowiednią liczbą powtórzeń (powiedzmy 5 lub 10).Podział danych na 1 połowę, trening w pierwszej połowie i walidacja w drugiej są jednym z etapów 2-krotnej walidacji krzyżowej (drugi etap to powtarzanie tego samego ćwiczenia z wymienionymi dwiema połówkami). Dlatego wyklucz strategię „dzielenia danych na pół”.
Wiele prac związanych z uczeniem maszynowym i eksploracją danych wykorzystuje k-krotną weryfikację krzyżową (nie ma cytatów), więc używaj jej, chyba że musisz być bardzo ostrożny na tym etapie.
Teraz, pomiń jedną metodę, a inne metody, takie jak „ pomiń p ” i „ losowy podział i powtórz ” (zasadniczo proces ładowania podobny do opisanego powyżej) są zdecydowanie dobrymi kandydatami.
Jeśli twój rozmiar danych to N, to krotność N-krotności jest zasadniczo taka sama jak pominięcie jednego.
„Leave P out” i „Bootstrap” różnią się nieco bardziej niż walidacja krzyżowania k-krotności, ale różnica polega zasadniczo na tym, jak definiowane są fałdy i jaka jest liczba powtórzeń „k”.
Jak mówi strona wiki, zarówno k-fold, jak i „ left p out ” są przyzwoitymi estymatorami „ oczekiwanych wyników / dopasowania ” (chociaż zakłady są wyłączone w odniesieniu do wariancji tych estymatorów).
Twoja sytuacja: masz tylko próbkę o wielkości 200 w porównaniu do liczby funkcji (100). Myślę, że istnieje bardzo duża szansa, że istnieje wiele modeli liniowych zapewniających tę samą wydajność. Sugerowałbym użycie k-krotnej weryfikacji krzyżowej z> 10 powtórzeniami . Wybierz wartość ak 3 lub 5.
Powód wartości k: wybór ogólny.
Powód powtarzania wartości: Przyzwoicie wysoka wartość powtórzeń jest prawdopodobnie kluczowa w tym przypadku, ponieważ wynik pojedynczego obliczenia k-krotnego sprawdzania poprawności krzyżowej może być podatny na fałdowanie wprowadzanej zmienności / losowości podziału.
Dodatkowe przemyślenia:
Być może zastosowałbym również metody „ pomiń p ” i „ bootstrap jak losowe powtórzenie podziału ” (oprócz walidacji krzyżowej k-krotności) dla tej samej miary wydajności / dopasowania, aby sprawdzić, czy wyniki mojej metody walidacji krzyżowej krotności wyglądają dobrze.
Chociaż chcesz korzystać ze wszystkich 100 funkcji, jak ktoś sugerował, zwróć uwagę na wielokoliniowość / korelację i może zmniejszyć liczbę funkcji.
źródło
rms
pakiecievalidate
icalibrate
funkcjach R.