【发布时间】:2018-05-25 23:45:48
【问题描述】:
我目前正在为我们的一个需要逻辑回归的业务流程进行概念验证。我一直在使用 statsmodels glm 对我们的数据集进行分类(按照下面的代码)。我们的数据集由大约 1000 万行和大约 80 个特征组成(其中几乎 70+ 是虚拟变量,例如基于定义的分类变量的“1”或“0”)。使用较小的数据集,glm 工作正常,但是如果我对完整的数据集运行它,python 会抛出错误“无法分配内存”。
glmmodel = smf.glm(formula, data, family=sm.families.Binomial())
glmresult = glmmodel.fit()
resultstring = glmresult.summary().as_csv()
这让我想到这可能是因为 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')
【问题讨论】: