我在R中使用randomForest包对这个大型数据集进行随机森林回归分析时遇到了问题,即使使用doSNOW并行处理并使用了10到20个核心,计算时间仍然很长。我认为我对randomForest函数中的”sampsize”参数存在误解。当我将数据集子集化到100,000行时,我可以在一棵树上花费9到10秒的时间构建它。
training = read.csv("training.csv")t100K = sample_n(training, 100000)system.time(randomForest(tree~., data=t100K, ntree=1, importance=T)) #~10sec
但是,当我在运行randomForest的过程中使用sampsize参数从完整数据集中抽取100,000行时,构建同一棵树需要几个小时。
system.time(randomForest(tree~., data=training, sampsize = ifelse(nrow(training<100000),nrow(training), 100000), ntree=1, importance=T)) #>>100x as long. Why?
显然,我最终将运行超过一棵树。我在这里遗漏了什么?谢谢。
回答:
你的括号有点问题。注意以下语句的区别。你目前有的是:
ifelse(nrow(mtcars<10),nrow(mtcars), 10)
这会计算布尔矩阵mtcars<10
中TRUE
的数量,该矩阵对于mtcars中每个小于10的元素标记为TRUE
,否则标记为FALSE
。你想要的是:
ifelse(nrow(mtcars)<10,nrow(mtcars), 10)
希望这对你有帮助。