如何加速R中大数据集的逻辑回归计算

时间:2014-09-18 21:39:00

标签: r logistic-regression

全部,

我正在开发一个应用程序,它可以并行计算大量的逻辑回归。我正在运行一个8核,英特尔i7处理器,支持16毫秒内存,但即使有这些不错的系统规格,也发现在大于100MB的数据集上计算时间非常慢。复合因素是我编写算法以完全交互训练框架中的所有分类和连续变量,因此1,000,000 x 8矩阵可以非常容易地扩展到例如1,000,000 x 32矩阵。

在R中,到目前为止,我已经尝试编写使用optim传递给method = "L-BFGS-B"的目标和损失函数,但在我的所有速度测试中,即使使用香草{{1实现。

我知道Python有一些非常好的逻辑回归工具,并且R - > Python,Python - > R集成得到很好的支持。目前这是我的首选,虽然我还没有测试过Python在逻辑回归中的速度比R快多少。

我想到的其他事情是尝试将R与Julia或F#联系起来,但编写好的API以允许这些语言相互交流超出了我的技能水平。

最后,我使用Dirk Eddelbuettel的glm包与Rcpp包一起检查,以优化我在C ++中的系数。除了不知道C ++(现在)之外,我需要一个动态重写C ++后端的脚本,使其匹配训练数据帧的维度和每次迭代时传递给它的参数集的长度。数据维度在我的算法中是动态的,我需要一个适应这种情况的优化程序。

该程序的工作流程目前全部包含在R中,如下所示:

(1)导入数据

(2)重新格式化数据

(3)将逻辑回归包装器应用于数据

(4)使用输出来预测新数据

我没有用新语言重写整个事物,而是寻找一种方法来提高(3)效率。我现在受到CPU的限制,而不是内存。

总结一下:

  • 对逻辑回归模型进行快速,记忆效率计算的最佳工具是什么?和
  • 是否可以将这些工具中的任何一个平滑地集成到R脚本文件中?
  • Python的逻辑回归能力比R的效率高多少?

谢谢,

亚伦

1 个答案:

答案 0 :(得分:0)

您是否尝试过对内存管理单元和进程调度程序的操作进行考虑?

1)如果可能的话,将其缩小并忘记并行运行一百万个线程。只是不要这样做。 2)如果你不能,找到一个更轻的线程实现并使用第三方库来完成它。 3)更改调度程序先发制人地从线程切换到线程的次数。要么:    关闭抢占式调度(中断的转换)并自行管理线程。