Skąd mam wiedzieć, która metoda walidacji krzyżowej jest najlepsza?

36

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 Xdane ( xmat) są skorelowane ze sobą i skorelowane w różnym stopniu ze yzmienną ( ymat). Podałem kod R, ale moje pytanie nie dotyczy R, ale metod. Xmatobejmuje zmienne X od V1 do V100, podczas gdy ymatzawiera 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 yoparty 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:

  1. 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,]
    
  2. 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 
    
  3. 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 validationkontra CV? Docenione przykłady będą mile widziane.

rdorlearn
źródło
Czy jesteś zainteresowany sprawdzeniem poprawności danych lub weryfikacją przewidywanych szacunków lub wartości współczynników b.
Subhash C. Davar,
Jestem zainteresowany weryfikacją przewidywanych szacunków lub wartości współczynników b
rdorlearn
Problem, który mam z metodą nr 1, polega na tym, że wielkość próbki jest znacznie mniejsza niż w rzeczywistości. Dlatego szacowane przedziały ufności / zmienność będą prawdopodobnie znacznie większe. Zgaduję również, że metoda nr 2 i metoda nr 3 będą podobne pod względem wydajności. Gdybym był tobą, zacznij od K-krotnej walidacji krzyżowej dla K = 5,6, ..., 14,15 i po prostu sprawdź, czy wyniki są dość podobne.
Kian
Czy zamierzasz również dokonać wyboru modelu, aby zmniejszyć liczbę zmiennych towarzyszących? 100 wydaje się całkiem sporo.
Kian
@ user2432701 Nie Chciałbym używać wszystkich 100.
rdorlearn

Odpowiedzi:

34

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”.

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, 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ę .

Jacques Wainer
źródło
Jeśli chodzi o skomplikowane wariancje walidacji krzyżowej, uważam, że należy uważać na wariancję, która ma być mierzona. IIRC, Bengio i in. skupić się na wariancji za pomocą zestawu danych o rozmiarze n do problemu pod ręką. Który jest inny (i większe) z losowo niepewności przewidywaniami modelu przeszkolony na tych danych ustawiony mam pod ręką. Zobacz także problematykę taksonomii w dokumencie Dietterich, do którego odsyłam powyżej.
cbeleites obsługuje Monikę
7

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:

  1. Każda sytuacja : użyj k-fold cross validationz 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).

  2. 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.

Theja
źródło
Sprawdź również tę odpowiedź: stats.stackexchange.com/questions/69291/…
Theja
Przeszedłem przez wiele z tego i przejdę bezpośrednio do bootstrapu optymizmu Efron-Gong zaimplementowanego w rmspakiecie validatei calibratefunkcjach R.
Frank Harrell,