2012-07-02 15 views
7

Czy ktoś może polecić strategię przewidywania przy użyciu modelu zwiększającego nachylenie w zakresie 10-15 ms (im szybciej, tym lepiej)?Gradient podnoszący prognozy w środowiskach produkcyjnych o niskim opóźnieniu?

Używałem pakietu R ', ale pierwsza prognoza trwa ~ 50 ms (kolejne wektoryzowane prognozy średnio do 1ms, więc wydaje się, że jest to narzut, być może w wywołaniu biblioteki C++). Jako wytyczną będzie ~ 10-50 wejść i ~ 50-500 drzew. Zadanie jest klasyfikacją i potrzebuję dostępu do przewidywanych prawdopodobieństw.

Wiem, że istnieje wiele bibliotek tam, ale nie miałem dużo szczęścia znajdowanie informacji nawet w przybliżonych prognozach dla nich. Szkolenie odbędzie się w trybie offline, więc tylko prognozy muszą być szybkie - również prognozy mogą pochodzić z fragmentu kodu/biblioteki, który jest całkowicie niezależny od szkolenia (o ile istnieje wspólny format do reprezentowania drzew) .

Odpowiedz

14

Jestem autorem implementacji drzew regresji wzmocnionej gradientem w języku Python pod numerem scikit-learn . Starałem się zoptymalizować czas przewidywania, ponieważ metoda była skierowana do środowisk o niskim opóźnieniu (w szczególności problemów z rankingiem); procedura predykcji jest napisana w języku C, nadal istnieje pewne obciążenie wynikające z wywołań funkcji Pythona. Powiedziawszy to: czas przewidywania dla pojedynczych punktów danych z ~ 50 cechami i około 250 drzew powinien wynosić < < 1ms.

W moich przypadkach użycia przewidywanie czasu często zależy od kosztów wyodrębnienia funkcji. Gorąco polecam profilowanie w celu wskazania źródła nadmiaru (jeśli korzystasz z Pythona, mogę polecić line_profiler).

Jeśli źródłem narzutu jest przewidywanie, a nie wyodrębnianie cech, można sprawdzić, czy możliwe jest wykonywanie przewidywań wsadowych zamiast przewidywać pojedyncze punkty danych, ograniczając w ten sposób obciążenie wynikające z wywołania funkcji Python (np. W rankingu, który często trzeba ocena najlepszych dokumentów K, więc można najpierw wyodrębnić funkcję, a następnie uruchomić przewidywanie na macierzy K x n_features

Jeśli to nie pomoże, należy spróbować ograniczyć liczbę drzew, ponieważ koszt runtime dla przewidywania jest w zasadzie liniowa w liczbie drzew. Istnieje wiele sposobów na ograniczenie liczby drzew bez wpływu na dokładność modelu:

  1. Właściwe dostosowanie szybkości uczenia; im mniejszy wskaźnik uczenia, tym więcej drzew jest potrzebnych, a tym samym wolniejsze jest przewidywanie.

  2. Post-process GBM z regulacją L1 (Lasso); Patrz: Elements of Statistical Learning Rozdział 16.3.1 - użyj przewidywań każdego drzewa jako nowych cech i uruchom reprezentację poprzez model liniowy L1 - usuń te drzewa, które nie mają żadnej masy.

  3. W pełni korekcyjne aktualizacje wagi; zamiast wykonywać wyszukiwanie linii/aktualizację wagi tylko dla najnowszego drzewa, zaktualizuj wszystkie drzewa (patrz [Warmuth2006] i [Johnson2012]). Lepsza konwergencja - mniej drzew.

Jeśli żadne z powyższych nie trick można zbadać kaskad i strategie wczesnego wyjścia (patrz [Chen2012])

Referencje:

[Warmuth2006] M. Warmuth, J. Liao i G. Ratsch.Całkowicie korygujące algorytmy wspomagające, które maksymalizują margines. W postępowaniu z 23. międzynarodowej konferencji na temat uczenia maszynowego 2006.

[johnson2012] Rie Johnson Tong Zhang, Nauka nieliniowych funkcji za pomocą uregulowanej Greedy Las, arXiv 2012.

[Chen2012] Minmin Chen Xu Zhixiang , Kilian Weinberger, Olivier Chapelle, Dor Kedem, Classifier Cascade za zminimalizowanie kosztu oceny funkcji, JMLR W & CP 22: 218-226, 2012.

+0

Próbowałem znaleźć informacje na temat przewidywania scikit-learn przewidywania w lipcu, ale nie mogłem t, więc zdecydowałem się zamiast tego używać płytkich algorytmów uczenia się (które, jak wiedziałem, spełniłyby wymagania dotyczące opóźnień). Moim przypadkiem użycia było ustalanie stawek w reklamach online, więc prognozowanie wsadowe pomogło, ale decyzja o każdym wyświetleniu musiała się zakończyć w czasie krótszym niż 10 ms. Odp .: Twoje sugestie, aby zmniejszyć liczbę drzew, próbowałem 1, przeczytałem 2 i zajrzę do 3 - dzięki za referencje/pomysły. W przypadku nowego projektu rozważam naukę Weka i scikit, więc twoja odpowiedź była pomocna. – lockedoff

+0

Istnieje punkt odniesienia dla przewidywania latencji vs dokładności w bieżącym HEAD of sklearn, wraz z (I wierzyć) dokładna dokumentacja na temat, w tym czasy prognozowania dla wielu klasyfikatorów/regresorów. Zobacz ten skrypt na przykład: https://github.com/oddskool/scikit-learn/blob/pred_latency/examples/applications/plot_prediction_latency.py – oDDsKooL

Powiązane problemy