2016-11-28 88 views
1

在插入符包中使用火车的默认值,我试图训练数据集xtr2(dim(xtr2):765 9408)的随机森林模型。问题在于它难以置信地花费很长时间(一次训练需要一天以上)来适应功能。据我所知在默认情况下使用自举采样(25次)和三次随机选择mtry,为什么它应该这么长? 请注意,我需要在每次运行中训练rf三次(因为我需要用相同的数据来表示不同随机森林模型的结果),并且需要大约三天的时间,我需要运行10个不同样品的代码,所以我需要30天才能得到结果。R caret randomforest

我的问题是我如何使它更快?

  1. 可以改变列车的默认值使运行时间减少吗?例如使用简历进行培训?

  2. 可以使用脱字符包进行并行处理吗?如果是的话,该怎么办?

  3. 随机森林包的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) 

谢谢

+1

你能分享你的样本数据集吗? –

+0

'dim(xtr2):765 9408'这是什么意思? – user31264

+0

什么需要24小时:'train'或'randomForest'? 'rffit $ bestTune $ mtry'的价值是什么?你有没有试着调用randomForest或者在小样本的数据上使用相同的参数进行训练(比如说50个元素)并且看看发生了什么?您是否尝试过在这些小样本上玩参数:keep.forest,important,oob.prox,mtry? – user31264

回答

2

我对你的问题的想法:

  1. 是的!但不要忘记,您也可以控制搜索网格caret用于调整参数;在这种情况下,mtry。我不知道默认的搜索网格是什么mtry,但请尝试以下操作:

    CTRL < - trainControl( “CV”,数= 5,verboseIter = TRUE)

    set.seed(101) #为再现

    RFFIT < - 列车(xtr2,ytr2,方法= “RF”,trControl = CTRL,tuneLength = 5)

  2. 是!请参阅caret网站:http://topepo.github.io/caret/parallel-processing.html

  3. 是,否! tuneRF只是使用OOB错误来找到最佳值mtryrandomForest中唯一的调整参数)。使用交叉验证往往会更好地工作,并对模型性能产生更真实的估计。 tuneRF可能需要很长时间,但应该比k-fold交叉验证更快。

总体而言,caret在线手册是相当不错的:http://topepo.github.io/caret/index.html

祝你好运!

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倍。