【发布时间】:2013-04-23 11:31:54
【问题描述】:
我在 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,])
有什么建议可以显着加快速度吗?
【问题讨论】:
-
我没有关于速度的直接建议,但就推断而言,您不应该使用
var+I(var^2)。相反,您应该使用poly(var,2)。你已经构建了一个非常复杂的公式,你需要这样一个怪物根本不清楚。您应该描述研究问题并获得有关分析设计的进一步建议,并且您可能应该在 CrossValidated 上这样做。 -
我怀疑拟合 1500 个参数会产生有用的结果。
-
有趣的技术问题,虽然我同意其他评论者的担忧。 (1)
RcppArmadillo包中有一个fastLm函数,说明了如何加速线性回归 gallery.rcpp.org/articles/fast-linear-model-with-armadillo ,但重新实现 GLM 会更有效。 (2) 安装优化的 BLAS 库可能是容易实现的目标:r-bloggers.com/faster-r-through-better-blas。 (3) 线性回归可能工作正常,尽管在这种情况下 N/P 仅为 133。 (4)通过glmnet包尝试惩罚GLM ... -
(5) 因为你的一些预测变量是因子,你可以通过使用稀疏模型矩阵来获得一些速度(参见
Matrix包中的?glm.fit和?sparse.model.matrix)——尤其是如果你的因素有很多层次。 -
你应该认真考虑使用
glmnet,它真的很快(它使用梯度下降)并且有 1500 个参数可以适应我不认为正则化(通过弹性网络)会受到伤害......跨度>
标签: performance r bigdata