R biglm 与分类变量

标签 r

我在 R 中使用一些 big.___() 包处理一个大型数据集。它约为 10 gig (100mmR x 15C),如下所示:

Price         Var1         Var2
12.45          1             1
33.67          1             2
25.99          3             3
14.89          2             2
23.99          1             1
...            ...          ...

我试图根据 Var1 和 Var2 预测价格。

我遇到的问题是 Var1 和 Var2 是 calcategori/因子变量。
Var1 和 Var2 各有 3 个级别(1,2 和 3),但数据集中只有 6 种组合

(1,1;  1,2;  1,3;  2,2;  2,3;  3,3)

要在 biglm() 中使用因子变量,它们必须存在于 biglm 使用的每个数据 block 中(我的理解是 biglm将数据集分成“x”个 block ,并在分析每个 block 后更新回归参数,以避免处理大于 RAM 的数据集。

我尝试对数据进行子集化,但我的计算机无法处理它或者我的代码错误:

bm11 <- big.matrix(150000000, 3)
bm11 <- subset(x, x[,2] == 1 & x[,3] == 1)

上面给了我一堆这些:

Error: cannot allocate vector of size 1.1 Gb

有人对解决此问题有任何建议吗?

我在带有 4 GB RAM 的 Windows 7 机器上使用 R 64 位。

最佳答案

您不需要每个 block 中存在的所有数据或所有值,您只需要考虑所有级别。这意味着您可以拥有这样的 block :

curchunk <- data.frame( Price=c(12.45, 33.67), Var1=factor( c(1,1), levels=1:3), 
  Var2 = factor( 1:2, levels=1:3 ) )

它会起作用的。即使 Var1 中只有 1 个值,Var2 中只有 2 个值,但这两个级别中都存在所有三个级别,因此它将执行正确的操作。

此外,biglm 不会为您将数据分解为 block ,而是希望您为其提供可管理的 block 以供使用。通过示例可以更好地了解这一点。 biglm 的常见方法是从文件或数据库中读取,读取前“n”行(其中“n”是合理子集)并将它们传递给 biglm > (可能在确保所有因素都指定了所有级别之后),然后从内存中删除该数据 block 并读取接下来的“n”行并将其传递给 update,继续执行此操作,直到文件末尾每次都会删除已使用的 block (这样您就有足够的内存空间用于下一个 block )。

关于R biglm 与分类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10502882/

相关文章:

RCurl::getURL 超出最大客户端数量

r - 自动折叠 R Bookdown 网站的侧边栏

R - 在 Twitter 句柄列表上使用循环来提取推文并创建多个数据框

r - 在 R 中使用sample.split 不正确地分割数据以及逻辑回归问题

r - 在将字符日期转换为 R 调查数据中的可用日期时处理 2000 与 1900

r - data.frame 行以列出命名元素

linux - 如何使用默认 R 安装通过 conda 安装 rpy2

r - R中的行名或列名中允许的最大字符数是多少?

r - 查找 "local maximas"但忽略小于最高值 20% 的值

r - R 是否具有类似于 Python、C 中的 main 函数的功能?