我在Amazon EC2上使用RStudio 0.97.320(R 2.15.3)。我的数据框有200k行和12列。
我正在尝试使用大约1500个参数进行逻辑回归。
R正在使用7%的CPU并且具有60 + GB的内存,并且仍然需要很长时间。
以下是代码:
glm.1.2 <- glm(formula = Y ~ factor(X1) * log(X2) * (X3 + X4 * (X5 + I(X5^2)) * (X8 + I(X8^2)) + ((X6 + I(X6^2)) * factor(X7))),
family = binomial(logit), data = df[1:150000,])
有任何建议可以大幅提速吗?
答案 0 :(得分:7)
您可以尝试speedglm
包中的speedglm
功能。我没有在你描述的问题上使用它,但特别是如果你安装一个BLAS库(如评论中提到的@Ben Bolker)它应该很容易使用并且给你一个很好的减速带。
我记得在使用和不使用BLAS库的情况下看到基准glm
和speedglm
的表格,但我今天似乎无法找到它。我记得我确信我想要BLAS和speedglm
。
答案 1 :(得分:4)
虽然有点晚但我只能鼓励dickoa建议使用Matrix包生成稀疏模型矩阵,然后将其提供给speedglm.wfit函数。这很好;-)这样,我能够在不到3分钟的时间内对1e6 x 3500模型矩阵运行逻辑回归。
答案 2 :(得分:2)
假设您的设计矩阵不稀疏,则还可以考虑使用我的软件包parglm
。有关计算时间的比较和更多详细信息,请参见this vignette。我在这里显示了计算时间on a related question的比较。
parglm
函数中的一种方法与bam
中的mgcv
函数相同。
Wood,S.N.,Goude,Y.&Shaw S.(2015)大型数据集的广义加性模型。皇家统计协会杂志,C系列64(1):139-155。
该方法的优势在于,可以使用非并行QR实现来实现它,并且仍然可以并行进行计算。另一个优点是可能会减少内存占用量。此功能用在mgcv
的{{1}}函数中,也可以在此处通过bam
的{{1}}函数中的设置来实现。