Jaki jest najbardziej efektywny sposób szkolenia danych przy użyciu najmniejszej ilości pamięci?

10

Oto moje dane treningowe: 200 000 przykładów x 10 000 funkcji. Zatem moja macierz danych treningowych wynosi - 200 000 x 10 000.

Udało mi się zapisać to w płaskim pliku bez problemów z pamięcią, zapisując każdy zestaw danych jeden po drugim (jeden przykład po drugim) podczas generowania funkcji dla każdego przykładu.

Ale teraz, gdy używam Milk , SVM light lub dowolnego innego algorytmu uczenia maszynowego, wszystko próbuje załadować całe dane treningowe do pamięci zamiast trenować je jeden po drugim. Mam tylko 8 GB pamięci RAM, więc nie mogę tego zrobić.

Czy wiesz w każdym razie, że mógłbym wyszkolić algorytm jeden zestaw danych przez jeden zestaw danych? To znaczy, że w każdej chwili mam tylko jeden zestaw danych załadowany do pamięci podczas treningu.

madCode
źródło
1
Co rozumiesz przez „zapisujesz każdy zestaw danych jeden po drugim?” Masz na myśli „każdą linię danych”? Jeśli masz wiele zestawów danych, które zapisujesz jeden po drugim, dlaczego nie załadować ich jeden po drugim i dopasować algorytm do każdego z nich?
Zach.
1
Czy „jeden zestaw danych po jednym zestawie danych” oznacza wiersz po wierszu? Tj. Jeden zestaw danych = 10000 funkcji? Jeśli tak jest, algorytmy online mogą być czymś, czego szukasz, patrz: en.wikipedia.org/wiki/Online_algorithm i en.wikipedia.org/wiki/Online_machine_learning . Istnieje wersja online dla wielu algorytmów przechylania maszyn, na przykład SVM i losowych lasów.
Herra Huu,
Dzięki .. Zach i Herra. Zredagowałem pytanie, aby jaśniej zdefiniować jeden po drugim. I tak, myślałem o nauczaniu online, ale nigdy nie myślałem o algorytmach online, pozwólcie mi to przeczytać i wypróbować.
madCode

Odpowiedzi:

4

Uważam, że termin do tego typu nauki jest out-of-rdzenia nauki. Jedną z sugestii jest ślubny wabbit , który ma wygodną bibliotekę R , a także biblioteki dla wielu innych języków.

Zach
źródło
Mam problemy z zależnościami podczas przyspieszania. masz jakiś pomysł, dlaczego to dostaję? bit.ly/L939DO
madCode
@madCode Nigdy tak naprawdę nie używałem wabbitów ślubnych, więc nie mogę pomóc w jego instalacji. Słyszałem, że ich lista mailingowa jest doskonała i jestem pewien, że znajdziesz tam pomoc w jej konfiguracji.
Zach.
Hej..Zach. Działa dobrze. Zainstalowałem go, a nawet dałem prognozy. dzięki :-)
madCode
1

Serdecznie popieram sugestię Zacha. Walbit Wpalbit jest doskonałą opcją, a jego szybkość zaskoczyłaby. Zestaw danych 200k na 10k nie jest uważany za duży według norm ślubnych wabbit.

wedpal_wabbit (dostępny w formie źródłowej przez https://github.com/JohnLangford/vowpal_wabbit , starsza wersja jest dostępna jako standardowy pakiet we wszechświecie Ubuntu) jest szybkim uczniem liniowym + dwuliniowym, z bardzo elastycznym wejściem. Możesz łączyć funkcje o wartości binarnej i liczbowej. Nie ma potrzeby numerowania funkcji, ponieważ nazwy zmiennych będą działać „tak jak są”. Ma mnóstwo opcji, algorytmów, redukcji, funkcji strat oraz wszechstronną elastyczność. Możesz dołączyć do listy mailingowej (znaleźć ją przez github) i zadać dowolne pytanie. Społeczność jest bardzo kompetentna i wspiera.

arielf
źródło
1

Odpowiedziałem na podobne pytanie tutaj . Chodzi o to, że większość algorytmów uczenia maszynowego / eksploracji danych uczy się wsadowo, tzn. Ładuje wszystkie dane do pamięci. Dlatego potrzebujesz różnych narzędzi do bardzo dużych zestawów danych. Zobacz także narzędzia do tych pytań.

Nauka online to sposób na zmniejszenie wykorzystania pamięci przez algorytmy.

Atilla Ozgur
źródło