Głębokie uczenie się a zwiększanie gradientu: kiedy czego używać?


30

Mam problem z dużymi danymi z dużym zestawem danych (weźmy na przykład 50 milionów wierszy i 200 kolumn). Zestaw danych składa się z około 100 kolumn numerycznych i 100 kolumn kategorycznych oraz kolumny odpowiedzi reprezentującej problem klasy binarnej. Liczność każdej z kolumn jakościowych jest mniejsza niż 50.

Chcę z góry wiedzieć, czy powinienem wybrać metody głębokiego uczenia się, czy też metody oparte na drzewach (na przykład zwiększanie gradientu, adaboost lub losowe lasy). Czy są jakieś eksploracyjne analizy danych lub jakieś inne techniki, które mogą pomóc mi zdecydować się na jedną metodę zamiast drugiej?


2
Myślę, że jeśli nie masz dobrej intuicji na temat właściwości danych, w końcu eksplorujesz obie opcje (być może w zaledwie 500 000 wierszy) i sprawdzasz poprawność krzyżową. Ale być może istnieją wizualizacje lub inne analizy, które mogą pomóc w uzyskaniu tej intuicji.
Neil Slater,

1
W tym tygodniu planowałem przeprowadzić duże porównanie modeli dla własnych badań rzeczywistych danych. Posprzątam trochę wyniki i opublikuję je tutaj. Co najmniej jeden student CS studiował pytanie: academia.edu/3526056/…
shadowtalker

1
@NeilSlater Chciałbym zobaczyć odpowiedź dotyczącą tego, czym ta intuicja może / mogłaby / powinna być
shadowtalker,

1
Nadal nie mam wystarczającej reputacji, aby skomentować twoje pierwotne pytanie i nie jest to tak naprawdę odpowiedź. W każdym razie chciałem powiedzieć, że uważam, że ten artykuł jest dość istotny w tej kwestii: Fernández-Delgado, M., Cernadas, E., Barro, S., i Amorim, D. (2014). Czy potrzebujemy setek klasyfikatorów, aby rozwiązać rzeczywiste problemy z klasyfikacją? The Journal of Machine Learning Research, 15, 3133–3181. Źródło: dl.acm.org/citation.cfm?id=2697065
José María Mateos

Czy są jakieś eksploracyjne analizy danych lub jakieś inne techniki, które mogą pomóc mi zdecydować się na jedną metodę zamiast drugiej? W ogólnym przypadku nie, twierdzenie „brak darmowego lunchu” to potwierdza. Ale są heurystyki, które mogą poprowadzić cię we właściwym kierunku, np. Scikit-learn.org/stable/tutorial/machine_learning_map/…
Simon

Odpowiedzi:


32

Po co ograniczać się do tych dwóch podejść? Bo są fajni? Zawsze zaczynam od prostego liniowego klasyfikatora \ regresora. Tak więc w tym przypadku liniowa SVM lub regresja logistyczna, najlepiej z implementacją algorytmu, która może skorzystać z rzadkości ze względu na rozmiar danych. Uruchomienie algorytmu DL na tym zbiorze danych zajmie dużo czasu, a normalnie starałbym się tylko głębokiego uczenia się na temat specjalistycznych problemów, w których istnieje hierarchiczna struktura danych, takich jak obrazy lub tekst. Jest to nadmierna umiejętność w przypadku wielu prostszych problemów z uczeniem się, zajmuje dużo czasu i wiedzy, a także algorytmy DL są bardzo powolne. Dodatkowo, ponieważ masz 50 milionów wierszy, nie oznacza to, że musisz użyć całego zestawu danych, aby uzyskać dobre wyniki. W zależności od danych możesz uzyskać dobre wyniki z próbką kilku 100 000 wierszy lub kilku milionów. Zaczynałbym od prostej próbki z małą próbką i klasyfikatorem liniowym, a od tego czasu komplikowałbym się bardziej, gdyby wyniki nie były zadowalające. Przynajmniej w ten sposób uzyskasz linię bazową. Często znaleźliśmy proste modele liniowe, aby wykonać bardziej zaawansowane modele w większości zadań, więc zawsze chcesz zacząć od tego.


4
+1 za rozpoczęcie od prostego modelu i podpróbkowania
Matt

Zgadzam się z użyciem svm do rzadkich danych, ale czy nie uważasz, że svm zajmie dużo czasu, aby wyszkolić tak ogromny zestaw danych!
blitu12345,

Nie, szczególnie jeśli jest rzadki i używa liniowego jądra. Ale mogą mieć problemy z dużą liczbą wierszy. Tak czy inaczej, będzie to o wiele szybsze niż model DL. Pamiętaj jednak, że zaleciłem również regresję logistyczną.
Simon

Moim głównym celem jest zacząć od prostego modelu liniowego, a nawet nie korzystać z pełnego zestawu danych, ponieważ jest mało prawdopodobne, aby cały zestaw danych był potrzebny, aby uzyskać dobrą wydajność. Wątpię, czy istnieje duża różnica w dokładności między użyciem powiedzmy 100 000 wierszy a kilkoma milionami.
Simon

+1 za wypróbowanie głębokiego uczenia się na temat specjalistycznych problemów, w których istnieje hierarchiczna struktura danych
eric2323223,

4

Oprócz innych odpowiedzi (a w komentarzach jest jakiś dobry link) zależy to od problemu i na jakie pytania chcesz odpowiedzieć. Jak mogę tylko sugerować na podstawie własnego doświadczenia, w przypadku zadania klasyfikacji możliwe metody mogą być poważnie ograniczone w oparciu o równowagę klas w zbiorze danych.

Po przejściu na nierównowagę klasy większą niż około 1:10 większość metod klasyfikacji po prostu przestaje działać. Zostaną ci metody oparte na losowym lesie i być może sieciach neuronowych (jeszcze nie próbowałem). Pracuję z równowagą klas w zakresie od 1: 500 do 1: 1000 i stwierdziłem, że ani próbkowanie w dół, ani w górę nie działa. Na szczęście mój zestaw danych to „tylko” 6 milionów obserwacji przez 200 zmiennych i jestem w stanie uruchomić wzmocnione drzewa na całym zestawie w rozsądnym czasie.

Aby bezpośrednio odpowiedzieć na twoje pytanie:

  • powinieneś wymyślić kilka pytań, na które chciałbyś odpowiedzieć, a w przypadku klasyfikacji sprawdź salda klas zmiennych docelowych.

  • powinieneś sprawdzić rozkład (nie w sensie matematycznym) brakujących wartości we wszystkich swoich danych i udokumentować to, co znajdziesz. Niektóre metody ML są w porządku z brakującymi wartościami, podczas gdy inne nie, i musisz przyjrzeć się imputacji danych (która ma swój własny zestaw reguł, wytycznych i problemów).


1
Wypróbuj klasyfikator SGD od sklearn z class_weight = „zrównoważony”
Diego

4

Z mojego punktu widzenia, dla 5 milionów wystąpień potrzeba wielu drzew, aby uzyskać dobrą oprawę uogólniającą (dobry model w laika). Jeśli nie jest to problem, skorzystaj z niego, nawet dokładna odpowiedź zależy od charakteru problemu. GBT jest dobrą metodą, szczególnie jeśli masz mieszane typy funkcji, takie jak kategoryczne, numeryczne i tym podobne. Ponadto, w porównaniu z sieciami neuronowymi, ma mniejszą liczbę hiperparametrów do dostrojenia. Dlatego szybciej jest mieć najlepszy model ustawień. Jeszcze jedna rzecz to alternatywa dla treningu równoległego. Możesz trenować wiele drzew jednocześnie z dobrym procesorem. Jeśli wyniki nie są satysfakcjonujące, wybierz Sieci neuronowe, ponieważ oznacza to, że Twój model powinien być bardziej rozbudowany i powinien uczyć się informacji o wyższym zamówieniu na podstawie danych. Jest to spowodowane NN w porównaniu z innymi algorytmami uczenia się.


4

Zgodnie z tym, co powiedział @Simon:

  1. Metody głębokiego uczenia się były szczególnie przydatne w rozwiązywaniu problemów w modelowaniu wzroku, mowy i języka, w których inżynieria cech jest trudna i wymaga dużego wysiłku.
  2. W przypadku Twojej aplikacji wydaje się, że tak nie jest, ponieważ masz dobrze zdefiniowane funkcje i wymagane są tylko interakcje między nimi itp.
  3. Biorąc pod uwagę, że modele dogłębnego uczenia się wymagają obecnie dużo zasobów obliczeniowych i czasu naukowca na nadrobienie zaległości, sugerowałbym wybranie podejścia niegłębnego uczenia się.

W przypadku twojego problemu wysiłek w porównaniu do korzyści nie wydaje się sprzyjać głębokiemu uczeniu się. DL byłoby przesadą


1

Gdy masz tak duży zestaw danych, możesz grać przy użyciu dowolnej techniki modelowania statystycznego i uczenia maszynowego, co jest bardzo zalecane. Jak sugerują inni, zaleciłbym również pobranie kilku milionów losowych próbek z danych i zabawienie się nimi. Ponieważ jest to problem z klasyfikacją, najpierw zastosuję proste techniki klasyfikacji, a następnie będę stosować bardziej złożone. Regresja logistyczna jest świetna na początek.

Chciałem dodać, że należy również wypróbować modele generatywne . Naiwny klasyfikator Bayesa jest jednym z najprostszych klasyfikatorów probabilistycznych i przewyższa wiele złożonych metod, takich jak obsługa maszyn wektorowych w wielu zadaniach. Możesz spojrzeć na prostą implementację NB i ten link do porównania NB do regresji logistycznej.

Można zbudować klasyfikator Naive Bayesa (NB) jako model podstawowy, a następnie wybrać dowolną technikę uczenia maszynowego, taką jak maszyny wektorów wsparcia (SVM) lub perceptrony wielowarstwowe (MLP). Kompromis polega na tym, że NB jest obliczeniowo tańszy niż MLP, więc pożądana jest lepsza wydajność MLP.

W odpowiedzi na twoje dokładne zapytanie: Głębokie uczenie się i zwiększanie drzewa gradientowego to bardzo potężne techniki, które mogą modelować dowolny rodzaj relacji w danych. Ale co, jeśli w twoim przypadku prosta regresja logistyczna lub NB daje pożądaną dokładność. Dlatego zawsze lepiej najpierw wypróbować proste techniki i uzyskać wyjściową wydajność. Następnie można wybrać złożone modele i porównać z linią bazową.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.