随机森林算法的优化实现


44

我注意到,有一些随机森林的实现,例如ALGLIB,Waffles和一些R包,例如randomForest。谁能告诉我这些库是否经过高度优化?它们是否基本上等同于《统计学习的要素》中详细介绍的随机森林,还是添加了很多额外的技巧?

我希望这个问题足够具体。为了说明我正在寻找的答案类型,如果有人问我线性代数软件包BLAS是否高度优化,我想说它是非常高度优化的,除了非常特殊的应用之外,几乎不值得尝试进行改进。


随机丛林可以并行运行在许多服务器上。参见:Schwarz等人(2010)。关于野生丛林的野生动物园:快速实现高密度数据的随机森林。生物信息学, 26,14,1752-8页,doi.org/ 10.1093/ bioinformatics/btq257。代码:1 ; 2 ; 34
User128525

Answers:


31

(在2015年9月6日更新,带有注释的建议,也使CW成为可能)

有两个适用于R的新的,不错的软件包,它们在特定条件下经过了很好的优化:

  • 游侠 -C ++,R软件包,针对问题进行了优化, GWAS数据进行并行,特殊处理。p>>n
  • 艺师 - C ++,R和Python绑定,适用于大优化问题,显然GPGPU计划。n

其他射频实现:

  • 原始的一个 -独立的Fortran代码,不是并行的,很难使用。
  • randomForest -C,R包,可能是最受欢迎的,不是并行的,与单核速度相比,实际上相当快,特别是对于小数据。
  • randomForestSRC -C,R包,randomForest的克隆,支持并行处理和生存问题。
  • 派对 -C,R包,速度很慢,但被设计为用于试验RF的飞机。
  • bigrf -C + / R,R软件包,旨在在bigmemory框架处理大数据;距离完成还很遥远。
  • scikit学习Ensemble林 -并行的scikit-learn框架的一部分,Python实现了RF的许多变体。
  • milk的RF-Python,牛奶框架的一部分。
  • Waffles -C ++,较大的ML工具包的一部分,并行且非常快。
  • 所谓的WEKA rf -Java / WEKA,并行。
  • 阿尔吉利布
  • 随机丛林 -被遗弃了吗?
  • rt-rank-被遗弃了吗?
  • PARF-被遗弃了吗?

游侠的纸有一些速度/内存的比较,但没有详尽的基准。


6
现在可以从Python scikit-learn工具箱添加sklearn.ensemble
chl 2012年

1
Python中的Milk还具有Random Forest实现。
耶基瓦(Jequihua)2013年

3
随机丛林已被游侠取代。我已经尝试过R版本(还有另一个C ++版本),它的速度明显比randomForest快(不过我没有计时)。作者在另一篇论文中做了一些测试(arxiv.org/abs/1508.04409)。
NoviceProg 2015年

11

据我所知,R版本的randomForest调用与原始版本相同的Fortran代码。此外,并行化randomForest函数很简单。它实际上是foreach文档中提供的示例之一。

library(foreach)
library(randomForest)
rf <- foreach(ntree = rep(250, 4), .combine = combine, .packages = "randomForest") %dopar% 
randomForest(x, y, ntree = ntree)

鉴于随机森林令人尴尬地是并行的,因此您可以进行的最大优化是并行运行它们。在那之后,我认为算法中没有其他任何低落的果实,但是我可能是错的。

唯一的问题是,您在组合森林中丢失了实际误差估计,但是可能有一种简单的计算方法(我很想知道如何做到这一点)。


7

所述ELSII使用随机森林(参见,例如,脚注3 p.591),它是R实施Breiman的和卡特勒的Fortran代码距离Salford。Andy Liaw的代码在C中。

派对包(在C中)提出了RF的另一种实现,它依赖于R / Lapack,它对BLAS有一些依赖性(请参见/include/R_ext/Lapack.h基本R目录)。

就装袋而言,将其并行化应该不难,但我会让更多专业的用户对此进行回答。


5

randomJungle背后的团队声称,它比R randomForest实现快一个数量级,并且使用的内存少一个数量级。R的randomJungle包正在开发中,但是我还没建立。

https://r-forge.r-project.org/projects/rjungler/


不确定4年后您是否仍然对此感兴趣,但是randomJungle的作者已将其替换为Ranger。我已经尝试过R ver,并且确实比使用某些示例数据的randomForest快得多(尽管我没有计时)。
NoviceProg 2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.