gpt4 book ai didi

r - 在 R 中建模一个非常大的数据集(180 万行 x 270 列)

转载 作者:行者123 更新时间:2023-12-04 18:27:50 33 4
gpt4 key购买 nike

我正在使用 RAM 为 8 GB 的 Windows 8 操作系统。我有一个 180 万行 x 270 列 的 data.frame,我必须在其上执行 glm。 (logit/任何其他分类)

我试过使用 ff 和 bigglm 包来处理数据。

但我仍然面临错误“Error: cannot allocate vector of size 81.5 Gb”的问题。
因此,我将行数减少到 10,并在 ffdf 类的对象上尝试了 bigglm 的步骤。但是错误仍然存​​在。

任何人都可以建议我解决构建具有这么多行和列的分类模型的问题吗?
**EDITS** :

当我运行代码时,我是 而不是 使用任何其他程序。
在我运行代码之前,系统上的 RAM 有 60% 空闲,这是因为 R 程序。当我终止 R 时,RAM 有 80% 空闲。

我正在添加 一些列 我现在正在按照评论者的建议进行复制。
OPEN_FLG 是DV 其他是IDV

str(x[1:10,])
'data.frame': 10 obs. of 270 variables:
$ OPEN_FLG : Factor w/ 2 levels "N","Y": 1 1 1 1 1 1 1 1 1 1
$ new_list_id : Factor w/ 9 levels "0","3","5","6",..: 1 1 1 1 1 1 1 1 1 1
$ new_mailing_id : Factor w/ 85 levels "1398","1407",..: 1 1 1 1 1 1 1 1 1 1
$ NUM_OF_ADULTS_IN_HHLD : num 3 2 6 3 3 3 3 6 4 4
$ NUMBER_OF_CHLDRN_18_OR_LESS: Factor w/ 9 levels "","0","1","2",..: 2 2 4 7 3 5 3 4 2 5
$ OCCUP_DETAIL : Factor w/ 49 levels "","00","01","02",..: 2 2 2 2 2 2 2 21 2 2
$ OCCUP_MIX_PCT : num 0 0 0 0 0 0 0 0 0 0
$ PCT_CHLDRN : int 28 37 32 23 36 18 40 22 45 21
$ PCT_DEROG_TRADES : num 41.9 38 62.8 2.9 16.9 ...
$ PCT_HOUSEHOLDS_BLACK : int 6 71 2 1 0 4 3 61 0 13
$ PCT_OWNER_OCCUPIED : int 91 66 63 38 86 16 79 19 93 22
$ PCT_RENTER_OCCUPIED : int 8 34 36 61 14 83 20 80 7 77
$ PCT_TRADES_NOT_DEROG : num 53.7 55 22.2 92.3 75.9 ...
$ PCT_WHITE : int 69 28 94 84 96 79 91 29 97 79
$ POSTAL_CD : Factor w/ 104568 levels "010011203","010011630",..: 23789 45173 32818 6260 88326 29954 28846 28998 52062 47577
$ PRES_OF_CHLDRN_0_3 : Factor w/ 4 levels "","N","U","Y": 2 2 3 4 2 4 2 4 2 4
$ PRES_OF_CHLDRN_10_12 : Factor w/ 4 levels "","N","U","Y": 2 2 4 3 3 2 3 2 2 3
[list output truncated]

这是我正在使用的代码的 示例
require(biglm)
mymodel <- bigglm(OPEN_FLG ~ new_list_id+NUM_OF_ADULTS_IN_HHLD+OCCUP_MIX_PCT, data = x)

require(ff)
x$id <- ffseq_len(nrow(x))
xex <- expand.ffgrid(x$id, ff(1:100))
colnames(xex) <- c("id","explosion.nr")
xex <- merge(xex, x, by.x="id", by.y="id", all.x=TRUE, all.y=FALSE)
mymodel <- bigglm(OPEN_FLG ~ new_list_id+NUM_OF_ADULTS_IN_HHLD+OCCUP_MIX_PCT, data = xex)

问题是我两次都收到相同的错误“Error: cannot allocate vector of size 81.5 Gb”。

请让我知道这是否足够,或者我是否应该包含有关该问题的更多详细信息。

最佳答案

我的印象是你没有使用 ffbase::bigglm.ffdf 但你想要。即以下内容会将您的所有数据放在 RAM 中,并将使用 biglm::bigglm.function,这不是您想要的。

require(biglm)
mymodel <- bigglm(OPEN_FLG ~ new_list_id+NUM_OF_ADULTS_IN_HHLD+OCCUP_MIX_PCT, data = x)

您需要使用 ffbase::bigglm.ffdf,它在 ffdf 上分块工作。所以加载导出 bigglm.ffdf 的包 ffbase。
如果使用 ffbase,则可以使用以下内容:
require(ffbase)
mymodeldataset <- xex[c("OPEN_FLG","new_list_id","NUM_OF_ADULTS_IN_HHLD","OCCUP_MIX_PCT")]
mymodeldataset$OPEN_FLG <- with(mymodeldataset["OPEN_FLG"], ifelse(OPEN_FLG == "Y", TRUE, FALSE))
mymodel <- bigglm(OPEN_FLG ~ new_list_id+NUM_OF_ADULTS_IN_HHLD+OCCUP_MIX_PCT, data = mymodeldataset, family=binomial())

解释:
因为您不限制自己在模型中使用的列,所以您将在 RAM 中获得不需要的 xex ffdf 的所有列。你在因子响应上使用高斯模型,奇怪吗?我相信您正在尝试进行逻辑回归,因此请使用适当的家庭参数?它将使用 ffbase::bigglm.ffdf 而不是 biglm::bigglm.function。

如果这不起作用 - 我怀疑,那是因为您在 RAM 中还有其他您不知道的东西。在那种情况下做。
require(ffbase)
mymodeldataset <- xex[c("OPEN_FLG","new_list_id","NUM_OF_ADULTS_IN_HHLD","OCCUP_MIX_PCT")]
mymodeldataset$OPEN_FLG <- with(mymodeldataset["OPEN_FLG"], ifelse(OPEN_FLG == "Y", TRUE, FALSE))
ffsave(mymodeldataset, file = "mymodeldataset")

## Open R again
require(ffbase)
require(biglm)
ffload("mymodeldataset")
mymodel <- bigglm(OPEN_FLG ~ new_list_id+NUM_OF_ADULTS_IN_HHLD+OCCUP_MIX_PCT, data = mymodeldataset, family=binomial())

你走吧。

关于r - 在 R 中建模一个非常大的数据集(180 万行 x 270 列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17295423/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com