R插入符随机森林
R caret randomforest
使用 caret 包中训练的默认值,我正在尝试为数据集 xtr2 (dim(xtr2): 765 9408) 训练随机森林模型。问题是它需要太长的时间(一次培训超过一天)来适应这个功能。据我所知,train 默认使用 bootstrap 采样(25 次)和 mtry 的三个随机选择,那么为什么要花这么长时间?
请注意,我需要训练 rf,每次 运行 三次(因为我需要对具有相同数据的不同随机森林模型的结果进行平均),大约需要三天时间,我需要 运行 10 个不同样本的代码,所以我需要 30 天才能得到结果。
我的问题是如何让它更快?
改变train的默认值可以减少运行时间吗?例如使用 CV 进行训练?
使用 caret 包进行并行处理有帮助吗?如果可以,如何实现?
随机森林包的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)
谢谢,
我对你的问题的看法:
是的!但是不要忘记,您还可以控制 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。
祝你好运!
您使用 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 倍。
我还要补充一点,主要问题是速度,caret
中还有其他几个随机森林实现,其中许多比原来的 randomForest
快得多出了名的慢。我发现 ranger
是一个不错的选择,可以满足我非常简单的需求。
这是一个不错的 summary of the random forest packges in R。其中许多已经 caret
。
另外考虑一下,这里有一个有趣的 study of the performance of ranger
vs rborist
,您可以在其中了解样本大小和特征之间的权衡如何影响性能。
使用 caret 包中训练的默认值,我正在尝试为数据集 xtr2 (dim(xtr2): 765 9408) 训练随机森林模型。问题是它需要太长的时间(一次培训超过一天)来适应这个功能。据我所知,train 默认使用 bootstrap 采样(25 次)和 mtry 的三个随机选择,那么为什么要花这么长时间? 请注意,我需要训练 rf,每次 运行 三次(因为我需要对具有相同数据的不同随机森林模型的结果进行平均),大约需要三天时间,我需要 运行 10 个不同样本的代码,所以我需要 30 天才能得到结果。
我的问题是如何让它更快?
改变train的默认值可以减少运行时间吗?例如使用 CV 进行训练?
使用 caret 包进行并行处理有帮助吗?如果可以,如何实现?
随机森林包的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)
谢谢,
我对你的问题的看法:
是的!但是不要忘记,您还可以控制
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。
祝你好运!
您使用 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 倍。
我还要补充一点,主要问题是速度,caret
中还有其他几个随机森林实现,其中许多比原来的 randomForest
快得多出了名的慢。我发现 ranger
是一个不错的选择,可以满足我非常简单的需求。
这是一个不错的 summary of the random forest packges in R。其中许多已经 caret
。
另外考虑一下,这里有一个有趣的 study of the performance of ranger
vs rborist
,您可以在其中了解样本大小和特征之间的权衡如何影响性能。