В R, как я могу вычислить итоговую функцию параллельно?

У меня есть огромный набор данных. Я вычислил полиномиальную регрессию по мултиному в пакете nnet.

mylogit<- multinom(to ~ RealAge, mydata)

Это займет 10 минут. Но когда я использую функцию суммирования для вычисления коэффициента, это занимает более 1 дня!!! Это код, который я использовал:

output <- summary(mylogit) 

Coef<-t(as.matrix(output$coefficients))

Мне было интересно, если кто-нибудь знает, как я могу вычислить эту часть кода путем параллельной обработки в R?

это небольшая выборка данных:

mydata:
to  RealAge
513 59.608
513 84.18
0   85.23
119 74.764
116 65.356
0   89.03
513 92.117
69  70.243
253 88.482
88  64.23
513 64
4   84.03
65  65.246
69  81.235
513 87.663
513 81.21
17  75.235
117 49.112
69  59.019
20  90.03

1 ответ

Решение

Если вы просто хотите коэффициенты, используйте только coef() метод, который делает меньше вычислений.

Пример:

mydata <- readr::read_table("to  RealAge
513 59.608
513 84.18
0   85.23
119 74.764
116 65.356
0   89.03
513 92.117
69  70.243
253 88.482
88  64.23
513 64
4   84.03
65  65.246
69  81.235
513 87.663
513 81.21
17  75.235
117 49.112
69  59.019
20  90.03")[rep(1:20, 3000), ]

mylogit <- nnet::multinom(to ~ RealAge, mydata)
system.time(output <- summary(mylogit))          # 6 sec
all.equal(output$coefficients, coef(mylogit))    # TRUE & super fast

Если вы профилируете summary() функция, вы увидите, что большую часть времени занимает crossprod() функция. Итак, если вы действительно хотите вывод summary() функции, вы можете использовать оптимизированную математическую библиотеку, такую ​​как MKL, предоставляемый Microsoft R Open.

Другие вопросы по тегам