我注意到,有一些随机森林的实现,例如ALGLIB,Waffles和一些R包,例如randomForest
。谁能告诉我这些库是否经过高度优化?它们是否基本上等同于《统计学习的要素》中详细介绍的随机森林,还是添加了很多额外的技巧?
我希望这个问题足够具体。为了说明我正在寻找的答案类型,如果有人问我线性代数软件包BLAS是否高度优化,我想说它是非常高度优化的,除了非常特殊的应用之外,几乎不值得尝试进行改进。
我注意到,有一些随机森林的实现,例如ALGLIB,Waffles和一些R包,例如randomForest
。谁能告诉我这些库是否经过高度优化?它们是否基本上等同于《统计学习的要素》中详细介绍的随机森林,还是添加了很多额外的技巧?
我希望这个问题足够具体。为了说明我正在寻找的答案类型,如果有人问我线性代数软件包BLAS是否高度优化,我想说它是非常高度优化的,除了非常特殊的应用之外,几乎不值得尝试进行改进。
Answers:
(在2015年9月6日更新,带有注释的建议,也使CW成为可能)
有两个适用于R的新的,不错的软件包,它们在特定条件下经过了很好的优化:
其他射频实现:
游侠的纸有一些速度/内存的比较,但没有详尽的基准。
据我所知,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)
鉴于随机森林令人尴尬地是并行的,因此您可以进行的最大优化是并行运行它们。在那之后,我认为算法中没有其他任何低落的果实,但是我可能是错的。
唯一的问题是,您在组合森林中丢失了实际误差估计,但是可能有一种简单的计算方法(我很想知道如何做到这一点)。
randomJungle背后的团队声称,它比R randomForest实现快一个数量级,并且使用的内存少一个数量级。R的randomJungle包正在开发中,但是我还没建立。
对于Javascript实现,请通过此演示进行。
如果您像饥饿的孩子一样渴望巧克力,这是您的随机森林巧克力 http://cs.stanford.edu/people/karpathy/svmjs/demo/demoforest.html