【发布时间】:2014-11-13 09:25:03
【问题描述】:
全部,
我正在开发一个并行计算大量逻辑回归的应用程序。我在带有 16 GB RAM 的 mac mini 上运行 8 核 Intel i7 处理器,但即使有这些体面的系统规格,我发现在大于 ~100MB 的数据集上计算时间非常缓慢。一个复合因素是我对算法进行了编程,以完全交互训练框架中的所有分类变量和连续变量,因此 1,000,000 x 8 矩阵可以很容易地扩展为 1,000,000 x 32 矩阵。
在 R 中,到目前为止,我已经尝试使用 method = "L-BFGS-B" 对传递给 optim 的目标函数和损失函数进行编码,但在我所有的速度测试中,即使使用普通的 glm 实现,这也基本上被打破了。
我知道 Python 有一些非常好的逻辑回归工具,并且很好地支持 R -> Python、Python -> R 集成。目前这是我的首选,尽管我还没有测试 Python 在逻辑回归中比 R 快多少。
我考虑过的其他事情是尝试将 R 与 Julia 或 F# 联系起来,但编写好的 API 以允许这些语言相互交流超出了我的技能水平。
最后,我检查了使用 Dirk Eddelbuettel 的 Rcpp 包和 lbfgs 包来优化我在 C++ 中的系数。除了不了解 C++(目前)之外,我还需要一个脚本来动态重写 C++ 后端,使其与训练数据帧的尺寸和每次迭代时传递给它的参数集的长度相匹配。数据维度在我的算法中是动态的,我需要一个适应这种情况的优化程序。
程序的工作流程,目前全部包含在R中,如下:
(1) 导入数据
(2) 重新格式化数据
(3) 对数据应用逻辑回归包装器
(4) 使用输出预测新数据
我不是用一种新语言重写整个东西,而是寻找一种方法来提高 (3) 的效率。我现在受到 CPU 的限制,而不是内存。
总结一下:
- 什么是对逻辑回归模型进行快速、高效内存计算的最佳工具?和
- 是否可以将这些工具中的任何一个平滑地集成到 R 脚本文件中?
- Python 的逻辑回归功能比 R 的效率高多少?
谢谢,
亚伦
【问题讨论】:
-
如果对您的应用程序有意义,您可能应该(=几乎肯定)使用带有稀疏模型矩阵的迭代重加权最小二乘法,而不是通用优化。首先检查
glm.fit并(1)去除你不需要的任何东西,(2)使其适应稀疏矩阵。还可以查看RcppEigen包中的fastLm。 -
现在检查这些并进行一些比较,谢谢,Ben。
-
@BenBolker:你玩过
biglm包吗?看起来它的内存效率很高——我想知道它也很快。在阅读了 glm.fit 的文档后,“拟合函数”部分似乎建议可以将“glm.fit”换成命名空间中的另一个优化函数。这是你的理解吗?有没有我可以使用迭代重新加权最小二乘的函数? -
biglm可能比完全在内存中工作慢。它本质上并不慢,但它的主要优点是它能够在内存不足的情况下工作。
标签: r logistic-regression