2016-07-07 48 views
10

Jest to kontynuacja previous question o uczeniu się wielu modeli.R - Paralelizacja uczenia się wielu modeli (z dplyr i purrr)

W przypadku użycia mam wiele obserwacji dla każdego przedmiotu, i Chcę wyszkolić model dla każdego z nich. Zobacz Hadley's excellent presentation, jak to zrobić.

W skrócie, jest to możliwe do zrobienia przy użyciu dply i purr tak:

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

Więc od modelu budynku jest zadaniem żenująco równoległych, byłem zastanawiać, czy dplyr, purrr mieć łatwy w użyciu mechanizm równoległości dla takich zadań (jak równoległy map).

Jeśli te biblioteki nie zapewniają łatwej synchronizacji, czy można to zrobić za pomocą klasycznych bibliotek R (parallel, foreach itd.)?

Odpowiedz

11

Wystarczy dodać odpowiedź dla kompletności tutaj, trzeba będzie zainstalować multidplyr z repo Hadley, aby uruchomić to, więcej informacji w 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)