随机森林是一种灵活, 易于使用的机器学习算法, 即使没有超参数调整, 也能在大多数情况下产生出色的结果. 它也是最常用的算法之一, 因为它简单, 并且可以用于分类和回归任务. 在这篇文章中, 您将学习随机森林算法如何工作以及其他几个重要的事情.
目录:
这个怎么运作
真实生活类比
特征重要性
决策树与随机森林的区别
重要的超参数(预测能力, 速度)
优点和缺点
用例
摘要
这个怎么运作:
随机森林是一种监督学习算法. 就像你已经从它的名字中看到的一样, 它创造了一个森林, 并使它在某种程度上是随机的. 它构建的 "森林" 是决策树的集合, 大部分时间都是用 "装袋" 方法训练的. 装袋方法的一般思想是学习模型的组合增加了整体结果.
用简单的话来说: 随机森林构建多个决策树并将它们合并在一起以获得更准确和稳定的预测.
随机森林的一大优势是, 它可以用于分类和回归问题, 这些问题构成了当前机器学习系统的大部分. 我将在分类中讨论随机森林, 因为分类有时被认为是机器学习的基石. 您可以在下面看到随机森林如何使用两棵树:
随机森林具有与决策树或装袋分类器几乎相同的超参数. 幸运的是, 您不必将决策树与装袋分类器组合在一起, 只需轻松使用随机森林的分类器类即可. 就像我已经说过的, 使用 Random Forest, 你也可以使用 Random Forest 回归量来处理回归任务.
随机森林为模型增加了额外的随机性, 同时种植树木. 它不是在分割节点时搜索最重要的特征, 而是在随机特征子集中搜索最佳特征. 这导致了广泛的多样性, 通常导致更好的模型.
因此, 在随机森林中, 用于分割节点的算法仅考虑特征的随机子集. 您甚至可以通过为每个特征使用随机阈值而不是搜索最佳可能阈值 (如正常决策树那样) 来使树更随机.
真实生活类比:
想象一下, 一个名叫安德鲁的人, 想要决定在一年的假期旅行中应该去哪些地方. 他问那些认识他的人. 首先, 他去找一位朋友, 朋友问安德鲁之前他去过哪里, 他是否喜欢. 根据答案, 他会给安德鲁一些建议.
这是典型的决策树算法方法. 安德鲁斯的朋友通过使用安德鲁的答案创建了规则, 以指导他决定应该向安德鲁推荐什么.
之后, 安德鲁开始要求越来越多的朋友给他建议, 他们再次问他不同的问题, 他们可以从中得到一些建议. 然后他选择了对他最推荐的地方, 这是典型的随机森林算法方法.
特征重要性:
随机森林算法的另一个高质量是, 很容易测量每个特征对预测的相对重要性. Sklearn 为此提供了一个很好的工具, 它可以通过查看使用该功能的树节点减少森林中所有树木的杂质来测量特征的重要性. 它会在训练后自动为每个要素计算此分数并对结果进行缩放, 以使所有重要性的总和等于 1.
如果你不知道决策树是如何工作的, 如果你不知道叶子或节点是什么, 这里是维基百科的一个很好的描述: 在决策树中, 每个内部节点代表一个属性的 "测试"(例如硬币正面还是反面朝上), 每个分支代表测试的结果, 每个叶节点代表一个类标签(在计算所有属性后作出决定).
没有子节点的节点是叶子.
通过查看特征重要性, 您可以决定要删除哪些特征, 因为它们对预测过程没有足够的贡献或没有贡献. 这很重要, 因为机器学习的一般规则是, 您拥有的特征越多, 您的模型就越容易受到过度拟合的影响, 反之亦然.
下面你可以看到一个表格和一个可视化, 它显示了 13 个特征的重要性, 我在监督分类项目中使用了有名的泰坦尼克号数据集. 你可以在这里找到整个项目.
决策树与随机森林之间的差异:
就像我已经提到的, 随机森林是决策树的集合, 但是存在一些差异.
如果您将具有要素和标签的训练数据集输入到决策树中, 它将制定一组规则, 用于进行预测.
例如, 如果您想预测一个人是否会点击在线广告, 您可以收集过去点击过的人的广告以及描述他的决定的一些功能. 如果将功能和标签放入决策树中, 它将生成一些规则. 然后, 您可以预测广告是否会被点击. 相比之下, 随机森林算法随机选择观察和特征来构建几个决策树, 然后平均结果.
另一个区别是 "深层" 决策树可能会受到过度拟合的影响. 随机森林通过创建特征的随机子集并使用这些子集构建较小的树来防止过度拟合. 之后, 它结合了子树. 请注意, 这不会每次都起作用, 并且它还会使计算速度变慢, 具体取决于随机林构建的树数.
重要的超参数:
随机森林中的超参数用于增加模型的预测能力或使模型更快. 我将在这里谈谈 sklearns 内置随机森林函数的超参数.
1. 增加预测能力
首先, 有 "n_estimators" 超参数, 它只是算法在进行最大投票或取平均预测之前构建的树数. 通常, 更多数量的树会提高性能并使预测更稳定, 但它也会减慢计算速度.
另一个重要的超参数是 "max_features", 它是 Random Forest 考虑拆分节点的最大特征数. Sklearn 提供了几个选项, 在他们的文档中有描述.
我们将在速度方面讨论的最后一个重要的超参数是 "min_sample_leaf". 与其名称一样, 这确定了拆分内部节点所需的最小叶子数.
2. 提高模型速度
该 "n_jobs" 超参数告诉引擎是多少处理器允许使用. 如果它的值为 1, 则它只能使用一个处理器. 值 "-1" 表示没有限制.
"random_state" 使模型的输出可复制. 当模型具有 random_state 的确定值并且已经给出相同的超参数和相同的训练数据时, 该模型将始终产生相同的结果.
最后, 还有 "oob_score"(也称为 oob 采样), 它是一种随机森林交叉验证方法. 在此抽样中, 大约三分之一的数据不用于训练模型, 可用于评估其性能. 这些样品称为袋外样品. 它与留一法交叉验证方法非常相似, 但几乎没有额外的计算负担.
优点和缺点:
就像我已经提到的, 随机森林的一个优点是它可以用于回归和分类任务, 并且很容易查看它分配给输入要素的相对重要性.
随机森林也被认为是一种非常方便易用的算法, 因为它的默认超参数通常会产生良好的预测结果. 超参数的数量也不是那么高, 而且它们很容易理解.
机器学习中的一个重大问题是过度拟合, 但大多数情况下, 这对于随机森林分类器来说不容易发生. 那是因为如果森林中有足够的树, 分类器就不会过度拟合模型.
随机森林的主要局限在于大量决策树可以使算法减慢并且对实时预测无效. 一般来说, 这些算法训练速度很快, 但一旦训练完成预测就很慢. 更准确的预测需要更多的树, 这导致更慢的模型. 在大多数实际应用中, 随机森林算法足够快, 但肯定存在运行时性能很重要而其他方法更受欢迎的情况.
当然, 随机森林是一种预测建模工具, 而不是一种描述性工具. 这意味着, 如果您正在寻找数据中关系的描述, 则首选其他方法.
用例:
随机森林算法用于许多不同的领域, 如银行, 股票市场, 医药和电子商务. 例如, 在银行业中, 它用于检测将比其他人更频繁地使用银行服务的客户, 并及时偿还他们的债务. 在此域中, 它还用于检测想要诈骗银行的欺诈客户. 在金融领域, 它用于确定未来股票的行为. 在医疗保健领域, 它用于识别医学中组分的正确组合, 并分析患者的病史以识别疾病. 最后, 在电子商务中, 随机森林用于确定客户是否真的喜欢该产品.
摘要:
随机森林是一个很好的算法, 可以在模型开发过程的早期进行训练, 看看它是如何执行的, 并且由于其简单性, 很难建立一个 "坏" 的随机森林. 如果您需要在短时间内开发模型, 此算法也是一个很好的选择. 最重要的是, 它提供了一个非常好的指标, 表明它为您的功能赋予的重要性.
随机森林在性能方面也很难被击败. 当然, 您可能总能找到一个能够表现更好的模型, 比如神经网络, 但这些通常需要花费更多的时间进行开发. 最重要的是, 它们可以处理许多不同的要素类型, 如二进制, 分类和数字.
总体而言, 随机森林是一种 (大多数) 快速, 简单和灵活的工具, 尽管它有其局限性.
点击英文原文 https://towardsdatascience.com/the-random-forest-algorithm-d457d499ffcd
更多文章欢迎访问: http://www.apexyun.com/ http://www.apexyun.com
公众号: 银河系 1 号
联系邮箱: public@space-explore.com
(未经同意, 请勿转载)
来源: https://juejin.im/post/5c862821e51d452a2f0309d6