【发布时间】:2017-01-22 11:17:39
【问题描述】:
我有大量随机森林的训练数据(暗淡:47600811*9)。我想获取多个(假设 1000)维度为 10000*9 的自举样本(每次运行中获取 9000 个负类和 1000 个正类数据点)并迭代地为所有这些树生成树,然后将所有这些树组合成 1 个森林。 下面给出了所需代码的粗略概念。有人可以指导我如何从我的实际 trainData 生成随机样本并以最佳方式迭代地为它们生成树吗?这将是很大的帮助。谢谢
library(doSNOW)
library(randomForest)
cl <- makeCluster(8)
registerDoSNOW(cl)
for (i=1:1000){
B <- 1000
U <- 9000
dataB <- trainData[sample(which(trainData$class == "B"), B,replace=TRUE),]
dataU <- trainData[sample(which(trainData$class == "U"), U,replace=TRUE),]
subset <- rbind(dataB, dataU)
我不确定这是否是从实际 trainData 一次又一次(1000 次)生成子集的最佳方式。
rf <- foreach(ntree=rep(125, 8), .packages='randomForest') %dopar% {
randomForest(subset[,-1], subset$class, ntree=ntree)
}
}
crf <- do.call('combine', rf)
print(crf)
stopCluster(cl)
【问题讨论】:
-
您是否尝试将 randomForest sampsize 参数设置为较小的值?将 sampsize 设置得更小,将 ntree 设置得更高可能与您正在做的类似。
-
@steve-weston 我正在尝试通过
i = replicate(3, {c(sample(which(trainData$class == "B"), 50, replace = T), sample(which(trainData$class == "U"), 50, replace = T))})创建实际数据的子集,然后应用 foreachrf <- foreach(ntree=rep(125, 8), .packages='randomForest') %dopar% {randomForest(trainData[i,-1], trainData[i,]$class, ntree=ntree, sampsize=rep(2,2))},然后通过crf <- do.call('combine', rf)组合树。然后我只得到 1000 棵树,而我的i包含 3 个子集,对于每个子集我生成 1000 棵树,那么我应该得到 3000 棵树。如何纠正? -
你的程序有一个错误,我在我的回答中描述并修复了这个错误。
标签: r parallel-processing random-forest statistics-bootstrap snow