众所周知,随机森林在各种任务上表现相当出色,并被称为学习方法的皮革人。是否存在应避免使用随机森林的任何类型的问题或特定条件?
何时避免随机森林?
考虑到引文的特定语言,皮革工是一种多功能工具:一件带有许多小小玩意儿的硬件。这是一把钳子,一把刀,一把螺丝刀等等!无需单独携带这些工具,Leatherman 是一件可以夹在裤子上的单品,因此随时可用。这很方便,但代价是每个组件工具都不是最好的。开罐器很难使用,螺丝刀的尺寸通常不合适,而小刀只能削尖。如果执行这些任务中的任何一项至关重要,那么最好使用专门的工具:一把真正的刀、一把真正的螺丝刀或一把真正的钳子。
可以用相同的术语来考虑随机森林。随机森林在各种数据集上产生了强大的结果,并且对调整参数不是非常敏感。但这并不完美。您对问题了解得越多,就越容易构建专门的模型来解决您的特定问题。
有几个明显的情况随机森林会遇到困难:
稀疏性——当数据非常稀疏时,很可能对于某些节点,自举样本和随机特征子集将协作以产生不变的特征空间。没有有效的拆分,因此该节点的子节点不太可能有帮助。XGBoost 在这种情况下可以做得更好。
数据不是轴对齐的——假设在两个特征的空间中有一个对角线决策边界,和. 即使这是与您的数据唯一相关的维度,也需要一个普通的随机森林模型多次拆分来描述该对角线边界。这是因为每个分割的方向都垂直于任意一个的轴或者. (这应该是直观的,因为普通的随机森林模型正在拆分形式.) 旋转森林,它对为每个分割选择的特征子集执行 PCA 投影,可以用来克服这个问题:原则上,投影到正交基将减少轴对齐属性的影响,因为分割将不再在原始基础上轴对齐。
此图像提供了另一个示例,说明轴对齐拆分如何影响随机森林决策。决策边界在原点是一个圆,但请注意,这个特定的随机森林模型会绘制一个框来近似圆。可以做很多事情来改善这个边界。最简单的包括收集更多数据和构建更多树。
- 随机森林基本上只适用于表格数据,即,在数据是图像的意义上,特征之间没有强烈的、质量上重要的关系,或者观察结果在图上被联网在一起。这些结构通常不能被许多矩形分区很好地近似。如果您的数据存在于时间序列中,或者是一系列图像,或者存在于图表上,或者具有其他一些明显的结构,那么随机森林将很难识别出来。我毫不怀疑,研究人员已经开发出尝试适应这些情况的方法的变体,但普通随机森林不一定会以有用的方式了解这些结构。好消息是你通常知道什么时候会出现这种情况,即你知道你有图像、时间序列或图表可以使用,
尖角。精确。
他们使用扩散方法。它们很适合凹凸不平的东西。当样本量较小时,它们不适合精细和高度详细的事物。我想他们在多元时间序列数据上表现不佳——当这里的某件事取决于远处的那件事时。
梯度增强的森林可能适合或过度适合,但对于相同的数据可以获得更低的误差。
“皮匠”不存在。没有“银弹”。有工具箱。了解您的工具,并妥善保管它们,以便它们能够照顾您。警惕“当你是一把锤子时,每个问题看起来都像钉子”,尤其是当你的工具箱中没有密集的库时。
在您充分了解问题之前,很容易想象任何事情都可以解决它,或者您最喜欢的工具可能会解决它。智慧建议深入了解问题,并非常熟悉您的工具。
补充:如果你有足够的计算资源或时间余量来使用其他东西。RF 不仅训练速度快,而且执行速度快。一个非常深的增强结构就更少了。你必须有开销来支持它。
这是我第一次真正回答问题,所以不要把我钉在上面..但我认为我可以回答你的问题:
如果您确实只对模型性能感兴趣而不是对可解释性感兴趣,那么随机森林确实通常是一种非常好的学习算法,但在以下情况下表现会稍差:
1.)当维度(特征数量)相对于训练样本的数量非常高时,在这些情况下,正则化线性回归或 SVM 会更好。
2.) 在数据中存在高阶表示/卷积结构的情况下,例如在计算机视觉问题中。在那些计算机视觉案例中,卷积神经网络的性能将优于随机森林(一般来说,如果有知识可以融入到学习中,那就更好了)。
话虽如此,随机森林是一个非常好的起点。我钦佩他的机器学习技能的人之一总是从学习随机森林和正则化线性回归器开始。
但是,如果你想要最好的性能,我相信现在的神经网络又名。深度学习看起来是一种非常有吸引力的方法。在 Kaggle 等数据挑战网站上,越来越多的获胜者使用深度学习模型进行比赛。神经网络的另一个优点是它们可以处理大量样本(>10^6 可以使用随机梯度下降训练它们,一次输入数据位)。就我个人而言,我发现这是一个非常有吸引力的深度学习专业人士。
随机森林适合您的数据的多维阶梯。它在预测中产生尖锐的边缘。如果您的数据具有连续性,那么可能有更好的方法来拟合它们。然而,这并不意味着“你应该避免使用随机森林来适应它们”:-) 我认为没有任何类型的数据让你“应该担心”使用 RF。
而且,我不会说 RF 是“皮革人”,从某种意义上说,它绝对不是“它会为你做一切”。它只是一种基本的通用方法,可用于各种数据。我会说它更像是“尝试的第一个简单的事情”,或者是对更好方法进行基准测试的“基线”。当我想查看哪些预测变量很重要时,我也会使用它;为此目的,有一个出色的 R 包Boruta 。