2016-07-07 56 views
10

Questo è un seguito di un previous question sull'apprendimento di più modelli.R - Parallelizzazione di più modelli di apprendimento (con dplyr e purrr)

Il caso d'uso è che ho più osservazioni per ciascun soggetto e Voglio addestrare un modello per ognuno di essi. Vedi il numero excellent presentation di Hadley su come farlo.

In breve, questo è possibile fare utilizzando dply e purr in questo modo:

library(purrr) 
library(dplyr) 
library(fitdistrplus) 
dt %>% 
    split(dt$subject_id) %>% 
    map(~ fitdist(.$observation, "norm")) 

Quindi dal momento che la costruzione del modello è un compito imbarazzante parallelo, ero chiedevo se dplyr, purrr hanno un facile da usare meccanismo di parallelizzazione per tali compiti (come un parallelo map).

Se queste librerie non forniscono una facile parallelizzazione, potrebbe essere eseguita utilizzando le classiche librerie di parallelismo R (parallel, foreach ecc.)?

risposta

11

Solo l'aggiunta di una risposta per completezza qui, è necessario installare multidplyr dalla repo di Hadley per eseguire questo, maggiori informazioni nella vignette:

library(dplyr) 
library(multidplyr) 
library(purrr) 

cluster <- create_cluster(4) 
set_default_cluster(cluster) 
cluster_library(cluster, "fitdistrplus") 

# dt is a dataframe, subject_id identifies observations from each subject 
by_subject <- partition(dt, subject_id) 

fits <- by_subject %>% 
    do(fit = fitdist(.$observation, "norm"))) 

collected_fits <- collect(fits)$fit 
collected_summaries <- collected_fits %>% map(summary)