【问题标题】:big.matrix as data.frame in Rbig.matrix 作为 R 中的 data.frame
【发布时间】:2012-01-09 01:50:40
【问题描述】:

我最近开始使用 R 进行数据分析。现在我在对大型查询数据集进行排序时遇到了问题(在 ASCII 模式下约为 1 GB,在我的笔记本电脑的 4GB RAM 下处于二进制模式)。对此数据集使用bigmemory::big.matrix 是一个不错的解决方案,但在gbm()randomForest() 算法中提供这样的矩阵“m”会导致错误:

cannot coerce class 'structure("big.matrix", package = "bigmemory")' into a data.frame

class(m) 输出如下:

[1] "big.matrix"
attr(,"package")
[1] "bigmemory"

有没有办法将big.matrix 实例正确传递给这些算法?

【问题讨论】:

  • 如果其他解决方案失败,您可能想尝试一下 Revolutions。我不知道它是否支持randomForest,但我认为他们支持大内存需求。例如,参见http://www.revolutionanalytics.com/products/enterprise-big-data.php。请注意,它是专有软件。有一个免费的学术版本。
  • 您能否提供实际使用的gbmrandomForest 呼叫?具体来说,您是否使用randomForest的公式界面?

标签: r dataframe ranking ehcache-bigmemory r-bigmemory


【解决方案1】:

我显然无法使用您的规模数据对此进行测试,但是我可以通过使用每个函数的公式接口来重现您的错误:

require(bigmemory)
m <- matrix(sample(0:1,5000,replace = TRUE),1000,5)
colnames(m) <- paste("V",1:5,sep = "")

bm <- as.big.matrix(m,type = "integer")

require(gbm)
require(randomForest)

#Throws error you describe
rs <- randomForest(V1~.,data = bm)
#Runs without error (with a warning about the response only having two values)
rs <- randomForest(x = bm[,-1],y = bm[,1])

#Throws error you describe
rs <- gbm(V1~.,data = bm)
#Runs without error
rs <- gbm.fit(x = bm[,-1],y = bm[,1])

不使用randomForest 的公式界面对于大型数据集是相当普遍的建议;它可能非常低效。如果您阅读 ?gbm,您会看到类似的建议,将您引导至 gbm.fit 以获取大数据。

【讨论】:

  • 我可以使用as.big.matrixdata.frame 转换为big.matrix 吗?因为当我转换时,我无法访问转换后的“big.matrix”的元素,如:&gt; cp2006.big.matrix&lt;-as.big.matrix(cp.2006) Warning message: In as.big.matrix(cp.2006) : Coercing data.frame to matrix via factor level numberings. &gt; class(cp.2006) [1] "data.frame" &gt; class(cp2006.big.matrix) [1] "big.matrix" attr(,"package") [1] "bigmemory" &gt; cp2006.big.matrix An object of class "big.matrix" Slot "address": &lt;pointer: 0x7fceb865caa0&gt;
【解决方案2】:

数字对象占用的内存多于磁盘空间的情况经常出现。向量或矩阵中的每个“双”元素占用 8 个字节。当您将对象强制为 data.frame 时,可能需要将其复制到 RAM 中。您应该避免尝试使用 bigmemory/big*** 软件包套件所支持的功能和数据结构之外的功能和数据结构。 “biglm” 可用,但我怀疑您是否可以期望 gbm() 或 randomForest() 识别和使用“big”-family 中的设施。

【讨论】:

    猜你喜欢
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    相关资源
    最近更新 更多