2011-09-25 14 views
6

Mam aplikację szyn, która jest hostowana na Heroku, dla której chcę włączyć analizę danych na żywo. Idealnie, chciałbym wymyślić sposób, aby uruchomić uogólniony wzmocniony model regresji, który, jak wiem, jest dostępny w obu R (http://cran.r-project.org/web/packages/gbm/index.html) i Stata (http://www.stata-journal.com/article.html?article=st0087). Chcę zapisać powstałe drzewo Gbm, a następnie w mojej aplikacji użyć go do przewidywania nowych wyników na podstawie danych wprowadzanych przez użytkownika.Opcje eksploracji danych/analizy statystycznej dla aplikacji Heroku Rails?

Jeśli to niemożliwe, będę otwarty na używanie innych algorytmów eksploracji danych. Najważniejsza dla mnie jest możliwość zintegrowania go z moją aplikacją Heroku, aby działała bez mojej lokalnej maszyny.

Opcje Przyjrzeliśmy się:

1) Heroku Pomoc zaproponował vendoring bibliotekę R w ruby ​​gem. Jestem stosunkowo nowy w rubinach i szynach, jest to dla mnie wykonalne. Rozglądałem się za instrukcjami dotyczącymi bibliotek vendingowych w klejnotach, ale nie udało mi się ich znaleźć.

2) Inny wątek tutaj (http://stackoverflow.com/questions/6495232/statistic-engine-that-work-with-heroku) wspomniał o CloudNumbers, ale nie wydaje się możliwe wywołanie usługi z Aplikacja Rails.

3) W jednym ze studiów przypadku Heroku wspomina o FlightCasterze, który wykorzystuje Clojure, Hadoop i EC2 do uczenia maszynowego (http://www.infoq.com/articles/flightcaster-clojure-rails). Widziałem, że Heroku wspiera Clojure, ale czy istnieje sposób na zintegrowanie go (a dokładniej Incanter) z moją aplikacją Rails?

Proszę dać mi znać, jeśli masz jakieś pomysły.

Odpowiedz

6

Odpowiem na to z perspektywy R. Generalnie masz zamiar zmierzyć się z dwoma problemami:

1) relacje z R, niezależnie od tego, gdzie jest uruchomiony

2) Robi to od Heroku, gdzie znajduje się specjalny zestaw wyzwań.

Istnieje kilka ogólnych podejść do pierwszego z nich - można użyć do wiązania R (rsruby, rinruby, etc.), można wyłożyć do R (na przykład z rubinu R -e "RCODEHERE"), można dostęp do R jako usługi sieciowej (zobacz pakiet Rook, a konkretnie coś takiego jak https://github.com/jeffreyhorner/rRack/blob/master/Rook/inst/exampleApps/RJSONIO.R) lub możesz ręcznie uzyskać dostęp do R, używając czegoś takiego jak rserve.

Spośród nich, wyłuskanie do R jest najłatwiejszą rzeczą do zrobienia, jeśli wykonujesz pojedynczą operację i nie przejmujesz się zbytnio wydajnością. Będziesz musiał przeanalizować wynik, który powróci, ale jest to najszybszy sposób na mojej drodze do pojedynczej operacji.

Dla bardziej znaczących zastosowań, sugeruję użycie jednego z wiązań lub ustawienie R jako usługi sieciowej w innej aplikacji Heroku i wywołanie jej za pośrednictwem protokołu HTTP.

Kolejnym wyzwaniem jest uruchomienie R na Heroku - nie jest on dostępny jako część standardowego środowiska, a jest to system plików tylko do odczytu bez dostępu administratora, więc nie można po prostu wykonać sudo apt-get install.

Można sprzedać R w klejnocie - ktoś zaczął to robić pod numerem https://github.com/deet-uc/rsruby-heroku, ale osobiście nie mogłem go uruchomić. Możliwe jest również zbudowanie R bezpośrednio na Heroku poprzez zainstalowanie wszystkich zależności, itp.- to podejście, które podjąłem pod https://github.com/noahhl/rookonheroku (krok 1 to wszystko, czego potrzebujesz, jeśli nie używasz Wieży).

Zauważ, że Heroku może nie pozwolić ci na uruchomienie drugiego procesu w tym samym wątku co twoja aplikacja Railsowa, co robi większość powiązań. Może to utrudniać działanie tych wiązań, dlatego preferuję albo wysyłanie do R, albo prezentowanie go jako usługi sieciowej i uzyskiwanie dostępu do niej przez HTTP.

Powiązane problemy