Czy zawsze powinniśmy robić CV?

9

Moje pytanie: czy powinienem zrobić CV nawet dla stosunkowo dużego zbioru danych?

Mam stosunkowo duży zestaw danych i zastosuję algorytm uczenia maszynowego do tego zestawu danych.

Ponieważ mój komputer nie jest szybki, CV (i wyszukiwanie siatki) zajmuje czasem zbyt dużo czasu. W szczególności SVM nigdy się nie kończy z powodu wielu parametrów dostrajania. Dlatego jeśli zrobię CV, muszę wybrać stosunkowo małe dane.

Z drugiej strony zestaw sprawdzania poprawności powinien być również duży, więc uważam, że dobrym pomysłem jest użycie zestawu sprawdzania poprawności, który ma taki sam (lub większy) rozmiar jak zestaw szkoleniowy. (Mianowicie zamiast CV używam dużego zestawu walidacyjnego do strojenia parametrów.)

Mam teraz co najmniej dwie opcje.

  1. wykonaj CV na małym zestawie danych.
  2. używaj stosunkowo dużego zestawu szkoleniowego i zestawu walidacyjnego bez CV.
  3. inny pomysł.

Jaki jest najlepszy pomysł? Zarówno teoretyczne, jak i praktyczne opinie są mile widziane.

H. Shindoh
źródło
1
To pytanie powinno oczywiście być CW.
H. Shindoh
1
Co jest duże Ile obserwacji? Ile funkcji / zmiennych / regresorów?
Jim
1
To zależy od komputera. Mianowicie nie mam na myśli „dużych zbiorów danych”, które wymagają kilku komputerów.
H. Shindoh

Odpowiedzi:

3

Zasadniczo nie trzeba przez cały czas używać weryfikacji krzyżowej. Celem CV jest uzyskanie bardziej stabilnego oszacowania uogólnienia twojego klasyfikatora, który uzyskałbyś przy użyciu tylko jednego zestawu testowego. Nie musisz używać CV, jeśli Twój zestaw danych jest ogromny, więc dodanie danych do zestawu treningowego nie poprawi znacznie twojego modelu, a kilka błędnych klasyfikacji w zestawie testowym przypadkowo nie zmieni tak naprawdę wyników .

Mając mały zestaw treningowy i duży zestaw testowy, twoje oszacowanie będzie stronnicze. Prawdopodobnie będzie to gorsze niż to, co uzyskasz przy użyciu większej ilości danych treningowych, a optymalne hiperparametry, które znalazłeś, mogą być inne dla większego zestawu danych, po prostu dlatego, że więcej danych będzie wymagało mniejszej regularności.

Jednak uzyskanie optymalnych hiperparametrów i tak nie jest ważną częścią i nie poprawi to radykalnie wydajności. Powinieneś skoncentrować swoją energię na zrozumieniu problemu, tworzeniu dobrych funkcji i utrzymywaniu danych w dobrym stanie.

Oto kilka rzeczy, które możesz rozważyć, aby przyspieszyć:

  1. Trenuj z mniejszą liczbą funkcji. Użyj funkcji wyboru i / lub redukcji wymiarowości, aby zmniejszyć rozmiar problemu
  2. Użyj wstępnie buforowanego jądra dla SVM
  3. Użyj algorytmów, które nie muszą wybierać hiper parametrów w siatce. Szczególnie liniowe, takie jak regresja logistyczna z karą grzbietową / lasso / elastyczną, a nawet liniową SVM. W zależności od implementacji, klasyfikatory te mogą pasować do modeli dla wszystkich hiperparametrów na wybranej ścieżce, kosztem dopasowania tylko jednego
  4. użyj szybszej implementacji dla swojego rodzaju problemu (będziesz musiał google go)

a nawet przy wolniejszym komputerze możesz:

  1. Użyj więcej rdzeni
  2. Użyj GPU
rep_ho
źródło
2

Walidacja krzyżowa to narzędzie do oszacowania wariancji metryki wydajności z powodu losowości danych (i być może algorytmu uczenia się, jeśli nie jest deterministyczna).

Jeśli więc użyjesz tylko jednego podziału, np. 80% pociągu + 20% testu i zgłoś swoje wyniki pomiaru z tego pojedynczego eksperymentu, istnieje duża szansa, że ​​każdy, kto spróbuje odtworzyć eksperyment przy użyciu dokładnie tych samych parametrów, znajdzie inną wydajność (czasami bardzo różne). Chyba że oczywiście zapewnisz ten sam dokładny podział, który nie ma znaczenia.

Wracając do twojego pytania, uważam, że zdecydowanie powinieneś użyć CV do zgłoszenia swojej wydajności (np. Zrób 10-krotnie CV i zgłoś średnią i standardowe odchylenie pomiaru wydajności). Teraz do dostrajania algorytmu możesz użyć znacznie mniejszego zestawu walidacyjnego próbkowanego z zestawu szkoleniowego (upewnij się, że nie jest on zawarty w zestawie testowym).

Jeśli obawiasz się, że nie znajdziesz najlepszych hiperparametrów przy użyciu małego zestawu, prawdopodobnie dostosowujesz algorytm do specyfiki zestawu danych. Jeśli nie możesz znaleźć konfiguracji przy użyciu małej próbki, która zapewnia rozsądną wydajność między wszystkimi fałdami, algorytm prawdopodobnie nie jest zbyt przydatny w praktyce.

Pamiętaj również, że niektóre algorytmy są po prostu zbyt wolne / nie skalują się dobrze w niektórych konfiguracjach. To także część praktycznego wyboru modelu.

Ponieważ wspominasz o SVM, oczywiście większość implementacji będzie wolna podczas próby znalezienia parametrów dla nieliniowych jąder przez wyszukiwanie siatki. Wyszukiwanie w sieci ma złożoność wykładniczą, więc używaj go z bardzo małą liczbą parametrów. Należy również pamiętać, że większość bibliotek zapewnia rozsądne parametry domyślne (lub przynajmniej ustawiasz jeden parametr i istnieją heurystyki, aby ustawić inne).

oDDsKooL
źródło