biglm预测无法分配大小为xx.x MB

时间:2016-07-01 17:31:35

标签: r regression linear-regression lm

我有这段代码:

library(biglm)
library(ff)

myData <- read.csv.ffdf(file = "myFile.csv")
testData <- read.csv(file = "test.csv")
form <- dependent ~ .
model <- biglm(form, data=myData)
predictedData <- predict(model, newdata=testData)

创建的模型没有问题,但是当我进行预测时......内存耗尽:

无法分配大小为xx.x MB

的矢量 一些提示? 或者如何使用ff为predictData变量保留内存?

3 个答案:

答案 0 :(得分:3)

之前我没有使用biglm包。根据你所说的,你在调用predict时内存不足,你有近7,000,000行新数据集。

要解决内存问题,必须以chunk方式进行预测。例如,您一次迭代地预测20,000行。我不确定predict.bigglm是否可以进行大块预测。

为什么不看看mgcv pacakage? bam可以适用于大数据集的线性模型/广义线性模型/广义加性模型等。与biglm类似,它在拟合模型时执行块方式矩阵分解。但是,predict.bam支持chunk-wise预测,这对你的情况非常有用。此外,它还进行并行模型拟合和模型预测,由parallel包[{1}}的使用参数cluster支持;有关并行示例,请参阅bam()?bam下的示例。

只需?predict.bam,然后检查library(mgcv)?bam

<强>备注

不要将?predict.bam参数用于并行性。这对参数回归没有用。

答案 1 :(得分:0)

以下是可能的原因和解决方案:

  1. 原因:您使用的是32位R

    解决方案:使用64位R

  2. 原因:你只是内存

    解决方案:如果可以,请分配更多RAM(?memory.limit)。如果您不能考虑使用ff,使用数据块,运行gc(),或者最后通过利用云来扩展。分块通常是大数据成功的关键 - 尝试一次10%的预测,在每个块之后将结果保存到磁盘,并在使用后删除内存中的对象。

  3. 原因:您的代码泄漏内存存在错误

    解决方案:修复错误 - 这看起来不像你的情况,但要确保你有预期大小的数据,并密切关注你的资源监控程序,以确保没有任何有趣的事情发生。< / p>

答案 2 :(得分:0)

我尝试过使用biglm和mgcv,但内存和因素问题很快就出现了。我在以下方面取得了一些成功:h2o library。