use*_*321 14 performance r random-forest
我的大小38 MB的训练集(12个属性与420000行).我运行下面的R
代码片段,训练使用模型randomForest
.这对我来说需要几个小时.
rf.model <- randomForest(
Weekly_Sales~.,
data=newdata,
keep.forest=TRUE,
importance=TRUE,
ntree=200,
do.trace=TRUE,
na.action=na.roughfix
)
Run Code Online (Sandbox Code Playgroud)
我认为,由于na.roughfix
,它是需要长时间来执行.有这么多的NA's
训练集中.
可能有人让我知道我怎么能提高性能?
我的系统配置是:
Intel(R) Core i7 CPU @ 2.90 GHz
RAM - 8 GB
HDD - 500 GB
64 bit OS
Run Code Online (Sandbox Code Playgroud)
smc*_*mci 51
(tl; dr是你应该a)将nodesize增加到>> 1和b)排除非常低重要性的特征列,甚至可以排除(例如)80%的列.您的问题几乎肯定不会na.roughfix
,但如果您怀疑na.roughfix
,在调用之前,作为独立步骤单独运行randomForest
.首先让红鲱鱼脱离.)
现在,以下所有建议仅适用于您超出内存限制,因此请测量内存使用情况,并确保不超过.(从可笑的小参数开始,然后将它们放大,测量运行时间,并继续检查它不会不成比例地增加.)
影响randomForest性能的主要参数是:
nodesize=1
,进行分类!在Breiman的软件包中,你不能直接设置maxdepth,而是nodesize
用作代理,并在下面阅读所有好的建议:CrossValidated:"关于调整随机森林的实用问题"nodesize=42
.(首先尝试nodesize = 4200(1%),查看它的速度,然后重新运行,调整节点大小.根据经验确定此数据集的良好节点大小.)strata,sampsize
参数然后运行时的一阶估计,表示mtry = M,ntrees = T,ncores = C,nfeatures = F,nrows = R,maxdepth = D_max,是:
Runtime proportional to: T * F^2 * (R^1.something) * 2^D_max / C
Run Code Online (Sandbox Code Playgroud)
(同样,如果超过内存,所有投注都会关闭.另外,尝试只运行一个核心,然后运行2,然后运行4并验证您实际上是否获得线性加速.而不是减速.)(大R的影响比线性更差,也许是二次的,因为树分区必须考虑数据行的所有分区;当然它比线性更糟糕.通过使用采样或索引来检查它只给它说10%的行).
提示:保持大量垃圾低重要性特征可以平方增加运行时间,从而提高准确性的次线性增加.这是因为在每个节点,我们必须考虑所有可能的特征选择(或任何数字mtry)允许.在每棵树中,我们必须考虑所有(F-choose-mtry)可能的特征组合. 所以这是我的方法,做"快速而肮脏的性能选择":
nodesize=42
或更大randomForest::varImpPlot()
.只选择前K个功能,选择K; 对于一个愚蠢的例子,选择K = 3.保存整个列表以供将来参考.newdata[,importantCols]
importance=F
(注意,上面的实际特征选择不是统计上有效的过程,不要依赖它,读取randomForest包以获得基于RF的特征选择的实际正确方法.)
归档时间: |
|
查看次数: |
22781 次 |
最近记录: |