2011-09-25 11 views
6

Ho un'app per rails ospitata su Heroku per la quale voglio incorporare alcune analisi di dati in tempo reale. Idealmente, mi piacerebbe capire un modo per eseguire un modello di regressione potenziato generalizzato, che so è disponibile in entrambi i R (http://cran.r-project.org/web/packages/gbm/index.html) e Stata (http://www.stata-journal.com/article.html?article=st0087). Voglio salvare l'albero gbm risultante e quindi, all'interno della mia app, usarlo per prevedere nuovi risultati basati sull'input dell'utente.Opzioni di data mining/analisi statistica per un'app di Heroku Rails?

Se ciò non è possibile, sarei aperto a utilizzare altri algoritmi di data mining. La cosa più importante per me è la possibilità di integrarlo nella mia app di Heroku in modo che possa funzionare senza la mia macchina locale.

Opzioni ho guardato in:

1) Heroku supporto suggerito vendoring biblioteca R in un gioiello rubino. Sono relativamente nuovo a ruby ​​e rail, è qualcosa che sarebbe fattibile per me. Ho cercato consigli su librerie di vendita in gemme, ma non sono riuscito a trovare molto.

2) Un altro thread qui (http://stackoverflow.com/questions/6495232/statistic-engine-that-work-with-heroku) ha menzionato CloudNumbers, ma non sembra possibile chiamare il servizio da un App per rails.

3) In uno dei loro casi di studio, Heroku menziona FlightCaster, che utilizza Clojure, Hadoop ed EC2 per il loro apprendimento automatico (http://www.infoq.com/articles/flightcaster-clojure-rails). Ho visto che Heroku supporta Clojure, ma c'è un modo per integrarlo (o più specificamente Incanter) nella mia app Rails?

Per favore fatemi sapere se avete qualche idea.

risposta

6

Risponderò da una prospettiva R. In generale, si sta andando ad affrontare due problemi:

1) Interfacciamento con R, indipendentemente da dove è in esecuzione

2) In questo modo da Heroku, dove ci sono una serie speciale di sfide.

Ci sono alcuni approcci generali per il primo di questi - è possibile utilizzare un legame R (rsruby, rinruby, ecc), si può sborsare per R (ad esempio, dal rubino R -e "RCODEHERE"), è possibile accedere a R come servizio Web (vedere il pacchetto Rook e in particolare qualcosa come https://github.com/jeffreyhorner/rRack/blob/master/Rook/inst/exampleApps/RJSONIO.R) oppure accedere manualmente a R utilizzando qualcosa come rserve.

Di questi, il bombardamento verso R è la cosa più semplice da fare se si sta eseguendo una singola operazione e non si preoccupano molto delle prestazioni. Avrai bisogno di analizzare l'output che ritorna, ma questo è il modo più veloce nella mia esperienza per una singola operazione.

Per un utilizzo più significativo, suggerirei di utilizzare uno dei binding o impostare R come servizio web su un'altra app di Heroku e chiamarlo tramite HTTP.

La prossima sfida è sempre R in esecuzione su Heroku - non è disponibile come parte dell'ambiente di serie, ed è un file system in sola lettura che non hanno accesso root, quindi non si può semplicemente fare sudo apt-get install.

E 'possibile vendor R in una gemma - qualcuno ha iniziato a farlo a https://github.com/deet-uc/rsruby-heroku, ma personalmente non sono riuscito a farlo funzionare. È anche possibile costruire R direttamente su Heroku installando tutte le dipendenze, ecc.- questo è l'approccio che ho preso a https://github.com/noahhl/rookonheroku (il passaggio 1 è tutto ciò che serve se non stai utilizzando Rook).

Si noti che Heroku potrebbe non consentire di avviare una seconda procedura nello stesso thread dell'applicazione Rails, che è ciò che fa la maggior parte dei binding. Questo può rendere piuttosto difficile il funzionamento di questi binding, ed è per questo che tendo a favorire il bombardamento verso R, o esponendolo come un webservice e accedendo tramite HTTP.