【问题标题】:R: Using the bigmemory library for classification with randomForestR:使用 bigmemory 库与 randomForest 进行分类
【发布时间】:2012-05-09 08:11:06
【问题描述】:

有没有人能够使用 randomForest 和 bigmemory 库设置分类(不是回归)。我知道不能使用“公式方法”,我们必须求助于“x=predictors,y=response 方法”。看来大内存库无法处理具有分类值的响应向量(毕竟它是一个矩阵)。就我而言,我有两个级别,都表示为字符。

根据 bigmemory 文档...“数据帧会将字符向量转换为因子,然后将所有因子转换为数字因子级别”

是否有任何建议的解决方法来让 randomForest 分类与 bigmemory 一起使用?

#EXAMPLE to problem
library(randomForest)
library(bigmemory)
# Removing any extra objects from my workspace (just in case)
rm(list=ls())

#first small matrix
small.mat <- matrix(sample(0:1,5000,replace = TRUE),1000,5)
colnames(small.mat) <- paste("V",1:5,sep = "")
small.mat[,5] <- as.factor(small.mat[,5]) 
small.rf <- randomForest(V5 ~ .,data = small.mat, mtry=2, do.trace=100)
print(small.rf)
small.result <- matrix(0,1000,1)
small.result <- predict(small.rf, data=small.mat[,-5])

#now small dataframe Works!
small.mat <- matrix(sample(0:1,5000,replace = TRUE),1000,5)
colnames(small.mat) <- paste("V",1:5,sep = "")
small.data <- as.data.frame(small.mat)

small.data[,5] <- as.factor(small.data[,5]) 
small.rf <- randomForest(V5 ~ .,data = small.data, mtry=2, do.trace=100)
print(small.rf)
small.result <- matrix(0,1000,1)
small.result <- predict(small.rf, data=small.data[,-5])


#then big matrix Classification Does NOT Work :-(
#----------------****************************----
big.mat <- as.big.matrix(small.mat, type = "integer")
#Line below throws error, "cannot coerce class 'structure("big.matrix", package = "bigmemory")' into a data.frame"
big.rf <- randomForest(V5~.,data = big.mat, do.trace=10)

#Runs without error but only regression
big.rf <- randomForest(x = big.mat[,-5], y = big.mat[,5], mtry=2, do.trace=100)
print(big.rf)
big.result <- matrix(0,1000,1)
big.result <- predict(big.rf, data=big.mat[,-5])

【问题讨论】:

  • 通过y = as.factor(big.mat[,5])强制转换因子?
  • 我应该补充一点,当对象对于内存来说确实太大时,我不知道randomForest 是否真的支持 big.matrix 输入。
  • 据我所知,randomForest 在调用模型构建时会将所有bigmemory 数据加载到 RAM 中。
  • @joran,谢谢!强制引发以下错误。
    as.data.frame.default(data) 中的错误:无法将 class 'structure("big.matrix", package = "bigmemory")' 强制转换为 data.frame >> big.response.vec
  • 对我来说运行良好。但我仍然很确定将 bigmemory 与 randomForest 一起使用不会完成任何事情:这些值必须全部加载到内存中才能传递给 C 代码。

标签: r machine-learning data-mining r-bigmemory


【解决方案1】:

bigrf 包可能会有所帮助。目前,它支持的分类功能有限。

【讨论】:

  • 你能举个例子吗?
猜你喜欢
  • 2013-10-18
  • 2012-12-18
  • 2017-01-11
  • 2015-01-06
  • 2011-06-20
  • 1970-01-01
  • 2015-12-16
  • 2018-04-07
  • 2017-10-17
相关资源
最近更新 更多