我有这段代码:
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变量保留内存?答案 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)
以下是可能的原因和解决方案:
原因:您使用的是32位R
解决方案:使用64位R
原因:你只是内存
解决方案:如果可以,请分配更多RAM(?memory.limit
)。如果您不能考虑使用ff
,使用数据块,运行gc()
,或者最后通过利用云来扩展。分块通常是大数据成功的关键 - 尝试一次10%的预测,在每个块之后将结果保存到磁盘,并在使用后删除内存中的对象。
原因:您的代码泄漏内存存在错误
解决方案:修复错误 - 这看起来不像你的情况,但要确保你有预期大小的数据,并密切关注你的资源监控程序,以确保没有任何有趣的事情发生。< / p>
答案 2 :(得分:0)
我尝试过使用biglm和mgcv,但内存和因素问题很快就出现了。我在以下方面取得了一些成功:h2o library。