我有一个庞大的数据集。我在nnet包中通过multinom计算了多项式回归。
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
如果您只想要系数,请仅使用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()
函数的输出,您可以使用优化的数学库,例如Microsoft R Open提供的MKL。