使用插入符号包中列车的默认值,我正在尝试为数据集xtr2(dim(xtr2):765 9408)训练随机森林模型。问题是难以置信地花费太长时间(一次训练超过一天)来适应这种功能。据我所知,火车在其默认情况下使用自举采样(25次)和三次随机选择mtry,那为什么它需要这么长时间呢? 请注意我需要在每次运行中训练rf三次(因为我需要使用相同的数据来表示不同随机森林模型的结果),并且需要大约三天,我需要运行10个不同样本的代码,所以我需要30天才能得到结果。
我的问题是如何让它更快?
可以更改列车的默认值,使操作时间减少吗?例如使用CV进行培训?
可以使用插入符包进行并行处理吗?如果是的话,该如何做?
随机林包的tuneRF可以对时间进行任何更改吗?
这是代码:
rffit=train(xtr2,ytr2,method="rf",ntree=500)
rf.mdl =randomForest(x=xtr2,y=as.factor(ytr2),ntree=500,
keep.forest=TRUE,importance=TRUE,oob.prox =FALSE ,
mtry = rffit$bestTune$mtry)
谢谢,
答案 0 :(得分:2)
我对你的问题的看法:
是的!但是不要忘记你也可以控制搜索网格caret
用于调整参数;在这种情况下,mtry
。我不确定mtry
的默认搜索网格是什么,但请尝试以下操作:
ctrl< - trainControl(“cv”,number = 5,verboseIter = TRUE)
set.seed(101)#的再现性
rffit< - train(xtr2,ytr2,method =“rf”,trControl = ctrl,tuneLength = 5)
是的!请参阅caret
网站:http://topepo.github.io/caret/parallel-processing.html
是和否! tuneRF
只是使用OOB错误来查找mtry
的最佳值(randomForest
中唯一的调整参数)。使用交叉验证往往更好地工作,并产生更诚实的模型性能估计。 tuneRF
可能需要很长时间,但应该比k倍交叉验证更快。
总体而言,caret
的在线手册非常好:http://topepo.github.io/caret/index.html。
答案 1 :(得分:2)
您仅使用train
来确定mtry
。我会跳过train
步骤,并保持默认mtry
:
rf.mdl =randomForest(x=xtr2,y=as.factor(ytr2),ntree=500,
keep.forest=TRUE,importance=TRUE,oob.prox =FALSE)
我强烈怀疑3种不同的跑步是个好主意。
如果你进行10倍交叉验证(我不确定它是否应该完成,因为验证根深蒂固在随机森林中),如果你的时间很短,10个部分就太多了。 5个部分就足够了。
最后,randomForest的时间与nTree成正比。设置nTree = 100,你的程序将运行5倍。
答案 2 :(得分:0)
我还要补充一点,它的主要问题是速度,caret
中还有其他几种随机森林实现,其中许多要比原始的randomForest
快得多,而原始的ranger
却很慢。我发现caret
是满足我非常简单需求的不错选择。
这是一个不错的summary of the random forest packges in R。其中许多已经在data() {
return {
splitDays:[], // :splitDays
};
},
mounted() {
axios
.get(`${process.env.*****}/users?role=***&active=***`)
.then(response => ( this.users = response.data,
console.log(this.users)
))
console.log(this.users)
/*
for (let splitDayIndex in mySplitDays){
let splitDay= mySplitDays[splitDayIndex]
splitDay.class = splitDay.lastname
splitDay.label = splitDay.lastname
mySplitDays[splitDayIndex]=splitDay
}
*/
},
中。
还有一个有趣的study of the performance of ranger
vs rborist
,您可以在其中查看样本大小和特征之间的权衡如何影响性能。