Nie jestem pewien, co chcesz zrobić w kroku 7a. Jak rozumiem teraz, nie ma to dla mnie sensu.
Oto jak rozumiem twój opis: w kroku 7 chcesz porównać skuteczność wstrzymania z wynikami krzyżowej weryfikacji obejmującej kroki 4–6 (więc tak, to byłaby konfiguracja zagnieżdżona).
Głównymi punktami, dla których nie sądzę, by to porównanie miało sens, są:
To porównanie nie może wykryć dwóch głównych źródeł nadmiernie optymistycznych wyników walidacji, które napotykam w praktyce:
wycieki danych (zależność) między danymi szkoleniowymi i testowymi, które są spowodowane hierarchiczną (aka klastrowaną) strukturą danych i która nie jest uwzględniana w podziale. W mojej dziedzinie mamy zazwyczaj wiele (czasem tysiące) odczytów (= wierszy w matrycy danych) tego samego pacjenta lub biologiczną replikę eksperymentu. Nie są one niezależne, więc podział walidacji należy przeprowadzić na poziomie pacjenta. Jednak taki wyciek danych występuje, zarówno przy podziale zestawu wstrzymania, jak i przy podziale walidacji krzyżowej. Hold-out będzie wtedy równie optymistycznie tendencyjny jak krzyżowa walidacja.
Wstępne przetwarzanie danych wykonane na całej macierzy danych, gdzie obliczenia nie są niezależne dla każdego wiersza, ale wiele / wszystkie wiersze są wykorzystywane do parametrów obliczeniowych dla wstępnego przetwarzania. Typowymi przykładami byłyby np. Projekcja PCA przed „faktyczną” klasyfikacją.
Ponownie, miałoby to wpływ zarówno na twoje powstrzymanie, jak i na zewnętrzną weryfikację krzyżową, więc nie możesz go wykryć.
W przypadku danych, z którymi pracuję, oba błędy mogą łatwo spowodować, że część błędnych klasyfikacji zostanie niedoceniona o rząd wielkości!
Jeśli jesteś ograniczony do tej zliczonej części wydajności przypadków testowych, porównania modeli wymagają albo bardzo dużej liczby przypadków testowych, albo absurdalnie dużych różnic w prawdziwej wydajności. Porównanie 2 klasyfikatorów z nieograniczoną liczbą danych treningowych może być dobrym początkiem do dalszej lektury.
Jednak porównywanie jakości modelu twierdzi, że wewnętrzna weryfikacja krzyżowa dla modelu „optymalnego” i zewnętrzna weryfikacja krzyżowa lub wstrzymanie sprawdzania poprawności ma sens: jeśli rozbieżność jest wysoka, wątpliwe jest, czy optymalizacja wyszukiwania siatki działała (możesz mieć wariancja odtłuszczona ze względu na dużą wariancję miary wydajności). To porównanie jest łatwiejsze, ponieważ można dostrzec kłopoty, jeśli wewnętrzne oszacowanie jest absurdalnie dobre w porównaniu do innych - jeśli tak nie jest, nie musisz się zbytnio przejmować optymalizacją. Ale w każdym razie, jeśli twój zewnętrzny (7) pomiar wydajności jest rzetelny i solidny, masz przynajmniej przydatne oszacowanie uzyskanego modelu, niezależnie od tego, czy jest optymalny, czy nie.
IMHO mierzenie krzywej uczenia się to jeszcze inny problem. Pewnie bym sobie z tym oddzielnie, i myślę, że trzeba zdefiniować jaśniej co trzeba krzywej uczenia się dla (nie trzeba krzywej uczenia się dla pomocą zbioru danych dotyczących danego problemu, danych i sposobu klasyfikacji lub krzywej uczenia się dla tego zestawu danych danego problemu, danych i metody klasyfikacji) oraz szereg dalszych decyzji (np. jak poradzić sobie ze złożonością modelu jako funkcją wielkości próbki treningowej? Zoptymalizować ponownie, użyć stałych hiperparametrów, zdecydować o funkcja do naprawy hiperparametrów w zależności od wielkości zestawu treningowego?)
(Moje dane zwykle mają tak mało niezależnych przypadków, aby pomiar krzywej uczenia się był wystarczająco precyzyjny, aby można go było wykorzystać w praktyce - ale może być lepiej, jeśli 1200 wierszy jest rzeczywiście niezależnych)
aktualizacja: Co jest „nie tak” w przykładzie scikit-learn?
Po pierwsze, tutaj nie ma nic złego z walidacją krzyżową. Zagnieżdżona walidacja ma ogromne znaczenie dla optymalizacji opartej na danych, a walidacja krzyżowa jest bardzo skutecznym podejściem (szczególnie w przypadku iteracji / powtarzania).
Zatem, czy w ogóle coś jest nie tak, zależy od twojego punktu widzenia: dopóki wykonasz uczciwą zagnieżdżoną walidację (zachowując ściśle niezależne zewnętrzne dane testowe), zewnętrzna walidacja jest właściwą miarą wydajności „optymalnego” modelu. Nic w tym złego.
Ale kilka rzeczy może i może pójść nie tak z wyszukiwaniem siatki tych miar wydajności typu proporcjonalnego do dostrajania hiperparametrów SVM. Zasadniczo oznaczają one, że możesz (prawdopodobnie?) Nie polegać na optymalizacji. Niemniej jednak, dopóki twój podział zewnętrzny został wykonany prawidłowo, nawet jeśli model nie jest najlepszy z możliwych, masz uczciwe oszacowanie wydajności uzyskanego modelu.
Spróbuję podać intuicyjne wyjaśnienie, dlaczego optymalizacja może mieć problemy:
p^np
Var(p^)=p(1−p)n
Potrzebujesz absurdalnie ogromnej liczby przypadków (przynajmniej w porównaniu z liczbą przypadków, które zwykle mogę mieć), aby osiągnąć wymaganą precyzję (wyczucie odchylenia / wariancji) do oszacowania przywołania, precyzję (sens wydajności uczenia maszynowego). Dotyczy to oczywiście również współczynników obliczanych z takich proporcji. Spójrz na przedziały ufności dla proporcji dwumianowych. Są szokująco duże! Często większa niż prawdziwa poprawa wydajności w porównaniu do siatki hiperparametrów. I statystycznie rzecz biorąc, wyszukiwanie siatki jest ogromnym problemem wielokrotnego porównywania: im więcej punktów siatki oceniasz, tym większe jest ryzyko znalezienia kombinacji hiperparametrów, która przypadkowo wygląda bardzo dobrze dla ocenianego podziału pociągu / testu. To właśnie mam na myśli przez odchylenie wariancji.
Intuicyjnie rozważ hipotetyczną zmianę hiperparametru, która powoli powoduje pogorszenie modelu: jeden przypadek testowy przesuwa się w kierunku granicy decyzji. Miary wydajności „twardej” nie wykrywają tego, dopóki sprawa nie przekroczy granicy i nie znajdzie się po złej stronie. Następnie jednak natychmiast przypisują pełny błąd dla nieskończenie małej zmiany hiperparametru.
Aby przeprowadzić optymalizację numeryczną, należy dobrze zachować miarę wydajności. Oznacza to: ani zwarta (nie do ciągłego różnicowania) część pomiaru wydajności typu proporcjonalnego, ani fakt, że poza tym skokiem, faktycznie występujące zmiany nie są wykrywane, nie są odpowiednie do optymalizacji.
Właściwe reguły punktacji są zdefiniowane w sposób szczególnie odpowiedni do optymalizacji. Mają swoje maksimum globalne, gdy przewidywane prawdopodobieństwa odpowiadają prawdziwym prawdopodobieństwom, że każdy przypadek należy do danej klasy.
W przypadku SVM masz dodatkowy problem, że nie tylko miary wydajności, ale także model reaguje w ten skokowy sposób: niewielkie zmiany hiperparametru nic nie zmienią. Model zmienia się tylko wtedy, gdy hiperparametry są wystarczającymi zmianami, aby spowodować, że jakiś przypadek przestanie być wektorem podporowym lub stanie się wektorem podporowym. Ponownie, takie modele są trudne do optymalizacji.
Literatura:
- Brown, L .; Cai, T. i DasGupta, A .: Oszacowanie przedziału dla proporcji dwumianowej, Statistics Science, 16, 101-133 (2001).
- Cawley, GC i Talbot, NLC: O nadmiernym dopasowywaniu w wyborze modelu i późniejszym odchyleniu wyboru w ocenie wydajności, Journal of Machine Learning Research, 11, 2079-2107 (2010).
Gneiting, T. & Raftery, AE: Strictly Proper Scoring Rules, Prediction and Estimation, Journal of American Statistics Association, 102, 359-378 (2007). DOI: 10.1198 / 016214506000001437
Brereton, R .: Chemometrics for rozpoznawania wzorców, Wiley, (2009).
wskazuje na skokowe zachowanie SVM jako funkcję hiperparametrów.
Aktualizacja II: wariancja szumowania
to, na co możesz sobie pozwolić w porównaniu modeli, oczywiście zależy od liczby niezależnych przypadków. Wykonajmy szybką i brudną symulację dotyczącą ryzyka odchylenia wariancji tutaj:
scikit.learn
mówi, że mają 1797 są w digits
danych.
- 10×10
- zakładamy, że oba parametry (zakresy) w ogóle nie wpływają na modele,
tzn. wszystkie modele mają taką samą rzeczywistą wydajność, powiedzmy, 97% (typowa wydajność dla digits
zestawu danych).
104digits
p.true = 0.97 # hypothetical true performance for all models
n.models = 100 # 10 x 10 grid
n.rows = 1797 # rows in scikit digits data
sim.test <- replicate (expr= rbinom (n= nmodels, size= n.rows, prob= p.true),
n = 1e4)
sim.test <- colMaxs (sim.test) # take best model
hist (sim.test / n.rows,
breaks = (round (p.true * n.rows) : n.rows) / n.rows + 1 / 2 / n.rows,
col = "black", main = 'Distribution max. observed performance',
xlab = "max. observed performance", ylab = "n runs")
abline (v = p.outer, col = "red")
Oto rozkład najlepiej obserwowanej wydajności:
Czerwona linia oznacza prawdziwe działanie wszystkich naszych hipotetycznych modeli. Średnio obserwujemy tylko 2/3 prawdziwego poziomu błędu dla pozornie najlepszego z 100 porównywanych modeli (dla symulacji wiemy, że wszystkie one działają jednakowo przy 97% poprawnych prognozach).
Ta symulacja jest oczywiście bardzo uproszczona:
- Oprócz wariancji wielkości próbki testowej istnieje przynajmniej wariancja wynikająca z niestabilności modelu, więc tutaj nie doceniamy wariancji
- Strojenie parametrów wpływających na złożoność modelu zazwyczaj obejmuje zestawy parametrów, w których modele są niestabilne, a zatem mają dużą zmienność.
- W przypadku cyfr UCI z przykładu oryginalna baza danych zawiera około 11000 cyfr napisanych przez 44 osoby. Co się stanie, jeśli dane zostaną pogrupowane według osoby, która napisała? (Czyli łatwiej jest rozpoznać 8 napisane przez kogoś, jeśli wiesz, jak ta osoba pisze, powiedzmy 3?) Efektywna wielkość próbki może wtedy wynosić zaledwie 44.
- Strojenie hiperparametrów modelu może prowadzić do korelacji między modelami (w rzeczywistości byłoby to uważane za dobrze zachowane z perspektywy optymalizacji numerycznej). Trudno jest przewidzieć wpływ tego (i podejrzewam, że jest to niemożliwe bez uwzględnienia faktycznego rodzaju klasyfikatora).
Zasadniczo jednak zarówno mała liczba niezależnych przypadków testowych, jak i duża liczba porównywanych modeli zwiększają błąd systematyczny. Ponadto artykuł Cawleya i Talbota podaje empirycznie obserwowane zachowanie.