小编Mio*_*Mio的帖子

如何在 bigglm 中消除“外部函数调用(arg 3)中的 NA/NaN/Inf”

我是 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)

r

6
推荐指数
1
解决办法
788
查看次数

减少statsmodels glm的多处理

我目前正在为我们需要逻辑回归的业务流程做一个概念验证.我一直在使用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)

python-3.x statsmodels

6
推荐指数
1
解决办法
803
查看次数

标签 统计

python-3.x ×1

r ×1

statsmodels ×1