В 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.