gpt4 book ai didi

R biglm 与分类变量

转载 作者:行者123 更新时间:2023-12-02 13:12:25 24 4
gpt4 key购买 nike

我在 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/

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