【发布时间】:2020-01-25 12:29:30
【问题描述】:
我有一个包含 2 个变量 y(工资)和名称(122000 个名称)的数据框(1000000 个观察值),我想用“名称”解释“y”
我尝试过使用 R 和 Python
R
mod<-lm(y~names,data=pop1)
R:消息错误:无法分配大小为 111.0 Gb 的向量
蟒蛇
fit = ols('y ~ C(names)', data=pop1).fit()
内存错误
【问题讨论】:
-
因为这两个错误消息都是关于大数和内存分配的,可能是什么原因?
-
你的内存需求太高了。有一些包可以解决这个问题,比如 R 中的 biglm。
-
算了。对具有 122k 级别的分类变量进行虚拟编码需要大量内存。但这不是你真正的问题。即使您有这种 RAM,生成的模型也将毫无用处。您需要一位顾问(统计学家或可能是机器学习专家)。
-
您隐式指定的模型具有约 122k 系数(即一个截距,每个“名称”一个截距)。您可能至少需要重新考虑模型,您可能希望在其中进行一些正则化。如果您不这样做,那么只需为每个“名称”运行单独的回归,因为它与您的模型几乎相同(您当前正在修复所有名称的截距)
标签: python r python-3.x lm