2

我有一个巨大的数据集。我通过 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
4

1 回答 1

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()函数的输出,您可以使用优化的数学库,例如Microsoft R Open提供的 MKL 。

于 2017-12-26T10:39:25.250 回答