我是 R 的新手,我正在做一些逻辑回归模型。我正在尝试对包含 100 多个变量的 200 万条记录的数据运行 bigglm。我的变量由数字和整数 (0/1) 组成,因为我已将其设置为指标,例如
isOK,quantity,weight,isUS,isEU,isASIA
0,2,1.1,0,0,1
1,1,0.9,1,1,0
Run Code Online (Sandbox Code Playgroud)
但是,bigglm 总是抛出错误
coef.bigqr(object$qr) 中的错误:外部函数调用中的 NA/NaN/Inf (arg 3)
从 traceback(),它显示了以下内容
14: coef.bigqr(object$qr)
13: coef(object$qr)
12: coef.biglm(iwlm)
11: coef(iwlm)
10: bigglm.function(formula = formula, data = datafun, ...)
9: bigglm(formula = formula, data = datafun, ...)
8: bigglm(formula = formula, data = datafun, ...)
7: bigglm.data.frame(myForm, data = myraw.data[i, , drop = FALSE],
family = binomial(link = logit))
6: bigglm(myForm, data = myraw.data[i, , drop = FALSE], family = binomial(link …
Run Code Online (Sandbox Code Playgroud) 我目前正在为我们需要逻辑回归的业务流程做一个概念验证.我一直在使用statsmodels glm来对我们的数据集进行分类(如下面的代码所示).我们的数据集包括~10M行和大约80个特征(其中大约70多个是假人,例如基于定义的分类变量的"1"或"0").使用较小的数据集,glm工作正常,但是如果我针对完整的数据集运行它,python会抛出错误"无法分配内存".
glmmodel = smf.glm(formula, data, family=sm.families.Binomial())
glmresult = glmmodel.fit()
resultstring = glmresult.summary().as_csv()
Run Code Online (Sandbox Code Playgroud)
这让我觉得这可能是因为statsmodels旨在利用所有可用的cpu核心,下面的每个子进程都会在RAM中创建数据集的副本(如果我弄错了,请纠正我).现在的问题是,如果有一种方法可以让glm只使用最少数量的内核吗?我没有进入性能,只是希望能够对整个数据集运行glm.
作为参考,下面是机器配置和一些更多信息(如果需要).
CPU: 10 cores
RAM: 40 GB (usable/free ~25GB as there are other processes running on the
same machine)
swap: 16 GB
dataset size: 1.4 GB (based on Panda's DataFrame.info(memory_usage='deep')
Run Code Online (Sandbox Code Playgroud)