机器学习的 Bagging 和随机森林集成算法

随机森林是最流行、最强大的机器学习算法之一。它是一种被称为自助聚合或 Bagging 的集成机器学习算法

在这篇文章中,您将了解用于预测建模的 Bagging 集成算法和随机森林算法。阅读本文后,您将了解:

  • 从样本中估计统计量的自助法。
  • 用于从单个训练数据集创建多个不同模型的自助聚合算法。
  • 对 Bagging 稍作调整即可获得非常强大分类器的随机森林算法。

本文是为开发人员编写的,不假定您具有统计学或数学背景。本文重点介绍算法的工作原理以及如何将其用于预测建模问题。

如果您有任何问题,请留言,我将尽力回答。

通过我的新书《掌握机器学习算法启动您的项目,其中包括分步教程和所有示例的Excel 电子表格文件。

让我们开始吧。

Bagging and Random Forest Ensemble Algorithms for Machine Learning

机器学习的 Bagging 和随机森林集成算法
图片来源:Nicholas A. Tonelli,保留部分权利。

自助法

在介绍 Bagging 之前,我们先快速了解一个重要的基础技术,称为自助法。

自助法是一种强大的统计方法,用于从数据样本中估计数量。如果数量是描述性统计量,例如均值或标准差,则最容易理解。

假设我们有一个包含 100 个值 (x) 的样本,我们想估计样本的均值。

我们可以直接从样本中计算均值,如下所示:

均值(x) = 1/100 * sum(x)

我们知道我们的样本很小,并且我们的均值存在误差。我们可以使用自助程序改进对均值的估计:

  1. 使用替换(这意味着我们可以多次选择相同的值)创建我们数据集的许多(例如 1000 个)随机子样本。
  2. 计算每个子样本的均值。
  3. 计算我们所有收集到的均值的平均值,并将其用作数据的估计均值。

例如,假设我们使用了 3 个重采样,并得到均值 2.3、4.5 和 3.3。取这些值的平均值,我们可以将数据的估计均值视为 3.367。

此过程可用于估计其他量,例如标准差,甚至机器学习算法中使用的量,例如学习到的系数。

获取您的免费算法思维导图

Machine Learning Algorithms Mind Map

方便的机器学习算法思维导图样本。

我创建了一份方便的思维导图,其中包含60多种按类型组织的算法。

下载、打印并使用它。


还可以独家访问机器学习算法电子邮件迷你课程。

 

 

自助聚合 (Bagging)

自助聚合(简称 Bagging)是一种简单而强大的集成方法。

集成方法是一种技术,它将来自多个机器学习算法的预测结合起来,以做出比任何单个模型更准确的预测。

自助聚合是一种通用程序,可用于减少那些方差高的算法的方差。方差高的算法是决策树,例如分类和回归树 (CART)。

决策树对它们训练的特定数据很敏感。如果训练数据发生变化(例如,树在训练数据的子集上训练),则生成的决策树可能会大不相同,进而预测结果也会大不相同。

Bagging 是将自助过程应用于高方差机器学习算法(通常是决策树)的过程。

假设我们有一个包含 1000 个实例 (x) 的样本数据集,并且我们正在使用 CART 算法。CART 算法的 Bagging 将按如下方式工作。

  1. 使用替换创建我们数据集的许多(例如 100 个)随机子样本。
  2. 在每个样本上训练一个 CART 模型。
  3. 给定一个新数据集,计算每个模型的平均预测值。

例如,如果我们有 5 个 Bagging 决策树,它们对输入样本进行了以下类别预测:蓝色、蓝色、红色、蓝色和红色,我们将取出现频率最高的类别并预测蓝色。

当使用决策树进行 Bagging 时,我们不太担心单个树过度拟合训练数据。因此,为了效率,单个决策树被深入生长(例如,树的每个叶节点处的训练样本很少),并且树不被剪枝。这些树将具有高方差和低偏差。这些是使用 Bagging 组合预测时子模型的重要特征。

Bagging 决策树时唯一的参数是样本数量以及要包含的树的数量。可以通过在每次运行后增加树的数量来选择,直到准确性开始停止显示改进(例如,在交叉验证测试工具上)。大量模型可能需要很长时间才能准备好,但不会过度拟合训练数据。

就像决策树本身一样,Bagging 可用于分类和回归问题。

随机森林

随机森林是对 Bagging 决策树的改进。

CART 等决策树的一个问题是它们是贪婪的。它们使用贪婪算法选择要分割的变量,该算法使误差最小化。因此,即使使用 Bagging,决策树也可能具有许多结构相似性,进而其预测结果具有高度相关性

当子模型的预测不相关或至多弱相关时,集成中多个模型的预测组合效果更好。

随机森林改变了子树的学习算法,从而使所有子树的预测结果相关性更低。

这是一个简单的调整。在 CART 中,选择分割点时,学习算法可以查看所有变量和所有变量值,以选择最优的分割点。随机森林算法改变了此过程,从而使学习算法仅限于搜索特征的随机样本。

在每个分割点可以搜索的特征数量 (m) 必须指定为算法的参数。您可以尝试不同的值并使用交叉验证进行调整。

  • 对于分类问题,一个好的默认值是:m = sqrt(p)
  • 对于回归问题,一个好的默认值是:m = p/3

其中 m 是在分割点可以搜索的随机选择特征的数量,p 是输入变量的数量。例如,如果一个数据集对于分类问题有 25 个输入变量,那么

  • m = sqrt(25)
  • m = 5

估计性能

对于从训练数据中提取的每个自助样本,都会有未包含在内的样本。这些样本被称为袋外样本 (Out-Of-Bag samples) 或 OOB。

每个模型在其未使用的样本上的性能,当取平均值时,可以提供 Bagging 模型的估计准确性。这种估计性能通常被称为 OOB 性能估计。

这些性能度量是可靠的测试误差估计,并且与交叉验证估计值具有良好的相关性。

变量重要性

在构建 Bagging 决策树时,我们可以计算每个分割点处变量的误差函数下降了多少。

在回归问题中,这可能是平方误差和的下降,在分类问题中,这可能是基尼分数。

这些误差下降可以对所有决策树取平均值并输出,以提供每个输入变量重要性的估计。当选择变量时下降越大,重要性越大。

这些输出有助于识别与问题最相关或最不相关的输入变量子集,并提出您可以执行的可能特征选择实验,其中从数据集中删除一些特征。

进一步阅读

Bagging 是一种简单的技术,在大多数机器学习入门教材中都有介绍。下面列出了一些示例。

总结

在这篇文章中,您了解了 Bagging 集成机器学习算法及其流行的变体——随机森林。您学到了:

  • 如何从数据样本中估计统计量。
  • 如何使用 Bagging 组合多个高方差模型的预测。
  • 如何在 Bagging 时调整决策树的构建,以降低其预测的相关性,这种技术称为随机森林。

您对本文或 Bagging 或随机森林集成算法有任何疑问吗?
请留言提问,我将尽力回答。

了解机器学习算法的工作原理!

Mater Machine Learning Algorithms

几分钟内了解算法如何工作

...只需算术和简单示例

在我的新电子书中探索如何实现
精通机器学习算法

它涵盖了**10种顶级算法**的**解释**和**示例**,例如:
_线性回归_、_k-近邻_、_支持向量机_等等...

最后,揭开
机器学习算法的神秘面纱

跳过学术理论。只看结果。

查看内容

《机器学习中的 Bagging 和随机森林集成算法》的 133 条回复

  1. Maria 2016 年 7 月 9 日上午 12:21 #

    感谢您对 Bagging 和随机森林的清晰有益的解释。我只是想知道 Bagging 方法中模型的数量(例如,决策树)和初始样本数量是否有任何公式或好的默认值?训练数据集大小 (n)、模型数量 (m) 和子样本数量 (n’) 之间是否存在我应该遵守的任何关系?

    • Jason Brownlee 2016 年 7 月 9 日上午 7:41 #

      很好的问题,Maria,我目前没有想到任何系统的研究。

      一个好的启发式方法是不断增加模型的数量,直到性能趋于稳定。

      此外,样本大小通常最好等于训练数据大小。

      • Alvie 2018 年 5 月 23 日下午 1:05 #

        嗨,Jason,如果样本大小等于训练数据大小,那么如何会有袋外样本呢?我对此感到非常困惑。

        • Jason Brownlee 2018 年 5 月 23 日下午 2:40 #

          因为我们正在有放回地选择示例,这意味着我们多次包含了一些示例,并且样本可能会留下许多未包含的示例。

          这有帮助吗?

          • Alvie 2018 年 5 月 23 日下午 4:10 #

            嗨,Jason。非常感谢!

        • Hamza 2018 年 11 月 13 日下午 4:58 #

          你需要有放回地选择数据。这意味着如果样本数据与训练数据相同,那么训练数据将在下次采样时增加,因为数据被选取了两次、三次或更多次。最好的方法是从样本数据中选取 60% 用于训练数据,以确保输出的多样性会产生不同的结果。我重复一遍。训练数据必须小于样本数据,以便根据有放回的多样性数据创建不同的树结构。

    • Anh Hoang Duc 2016 年 9 月 12 日下午 2:32 #

      嗨,@Maria,
      在 R 中,您可以使用 randomForest 包中的 tuneRF 函数来查找 randomForest 的最佳参数

  2. Luis O 2016 年 10 月 15 日上午 2:31 #

    我总是阅读你的帖子 @Jason Brownlee。但我认为在这种情况下,你需要一些图表来更好地解释。此外,当你提到公式时,尝试使用不同的字体样式。

    • Jason Brownlee 2016 年 10 月 15 日上午 10:25 #

      感谢您的反馈,Luis,非常感谢。

      • Yogesh Honap 2020 年 1 月 5 日下午 5:16 #

        @Jason – 我能知道在 Bagging 和 Boosting 的情况下,我们是使用多种算法(例如决策树、逻辑回归、SVM 等)还是只使用一种算法来生成多个模型?

        • Jason Brownlee 2020 年 1 月 6 日上午 7:10 #

          在 Bagging 和 Boosting 中,我们通常使用一种算法类型,传统上是决策树。

      • Santhosh 2020 年 1 月 5 日下午 9:00 #

        @Jason Brownlee 您能结合实时示例详细阐述机器学习中的所有概念吗?

  3. OpenFlow 2016 年 12 月 1 日上午 9:30 #

    嗨,Jason,

    你在这里做得很好。在我发现你的网站之前,我对机器学习一无所知。信不信由你,我跟着它学得很好。#热爱数学。

  4. Shilpa Anil 2017 年 1 月 4 日上午 4:52 #

    先生,我必须使用随机森林回归预测每日气温值,并且我有 5 个输入变量。您能否解释一下回归中如何执行分割?每个分割点具体做了什么?

  5. Ola 2017 年 1 月 13 日上午 3:14 #

    谢谢您的这篇文章!它帮助我澄清了在我的硕士论文分析中使用随机森林的决定。

  6. Joe Ellsworth 2017 年 1 月 24 日下午 1:06 #

    嗨,Jason,我喜欢你的文章。我正在研究一个量化分类器,很乐意合作写一篇文章。https://bitbucket.org/joexdobs/ml-classifier-gesture-recognition

  7. Chandrakant Pattekar 2017 年 5 月 28 日下午 6:49 #

    解释得非常清楚

  8. Mercy Peter 2017 年 6 月 23 日下午 3:26 #

    解释非常简洁明了,切中要害。

  9. Paul C 2017 年 6 月 28 日上午 1:35 #

    嗨,Jason,自助采样一个样本并计算自助采样均值的均值“改进了均值的估计”这种说法是不正确的。标准 MLE(即样本均值)是总体均值的最佳估计。自助法在很多方面都很有用,但不能提供更好的均值估计。

  10. Felipe 2017 年 7 月 30 日上午 1:49 #

    嗨,Jason!我正在阅读您的文章,它帮助我理解了 Bagging 的背景。我需要在 Caltech 101 数据集上实现 Bagging,但我不知道如何开始。我正在用 Matlab 编程,但我不知道如何从 Caltech 101 创建文件到 Matlab,并研究数据以创建 Ensemble。我有点困惑!您有什么建议可以帮助我吗?

    • Jason Brownlee 2017 年 7 月 30 日上午 7:49 #

      抱歉,我没有 Matlab 示例。我可能不是给你建议的最佳人选。

  11. Sonal 2017 年 8 月 8 日上午 12:43 #

    嗨,Jason,您能推荐一些 C++ 库(开源或商业许可),其中包含决策树及其变体(Bagging、随机森林)的准确实现吗?

    • Jason Brownlee 2017 年 8 月 8 日上午 7:50 #

      不是很清楚。也许是 XGBoost——我想它是由 C++ 编写的。

  12. Himanshu 2017 年 11 月 17 日上午 2:24 #

    当我的训练数据中标签数据非常少时,如何使用 Bagging 在训练的完整分布上验证性能?

    • Jason Brownlee 2017 年 11 月 17 日上午 9:27 #

      我不确定我是否理解,你能详细说明吗?

      • Himanshu 2017 年 11 月 17 日下午 9:23 #

        我的意思是,在 10 万个训练数据中,我有 2 千个已标记数据,那么我可以使用 Bagging 来标记训练数据集中其余的未标记数据吗?我会在 Bagging 之前在 2 千个已标记数据中进行交叉验证

        • Jason Brownlee 2017 年 11 月 18 日上午 10:16 #

          您可以在 2K 数据上构建模型,并预测其余 100K 数据的标签,您将需要测试一系列方法,以通过交叉验证查看哪种方法效果最好。

  13. Rajit Nair 2017 年 12 月 4 日下午 5:08 #

    嗨 Jason,你的博客总是对我很有用,但如果你能举一个例子并解释整个过程,它会更有用。不过,你的博客总是新颖有趣的。

  14. Simon Ting 2017 年 12 月 26 日下午 9:45 #

    Jason,很棒的教程!我有点困惑于“变量重要性”部分,Bagging 算法的哪一步需要通过估计误差函数下降来计算每个变量的重要性?

    • Jason Brownlee 2017 年 12 月 27 日上午 5:19 #

      谢谢。

      我不确定我是否理解,也许你能重新陈述一下问题?

  15. sachindeo chavan 2018 年 1 月 14 日上午 10:33 #

    亲爱的 Jason,我是利物浦大学理学硕士大数据分析专业的学生,刚接触回归。我的问题是关于随机森林,随机森林是非参数回归模型吗?此致 sachin

  16. Alejandra 2018 年 1 月 23 日下午 6:56 #

    谢谢你讲清楚了。我背景不足(我是记者),但很容易理解。感谢分享您的知识!

  17. Josie 2018 年 1 月 28 日上午 4:35 #

    很棒的帖子!Bagging 和随机森林解释得非常清楚。非常有帮助。非常感谢!

  18. hemant yadav 2018 年 3 月 6 日下午 10:09 #

    我无法用语言表达这篇文章对我的帮助有多大。感谢您发布此内容。

  19. Hamed S 2018 年 3 月 27 日上午 2:59 #

    感谢这篇有用的文章,Jason!

    我认为在以下短语中,“样本”应该替换为“总体”:

    假设我们有 100 个值 (x) 的样本,我们想估计“样本”的均值。

    维基百科中也提到:

    “自助法的基本思想是从样本数据中推断总体……”

    • Jason Brownlee 2018 年 3 月 27 日上午 6:40 #

      没错,我们使用数据样本来估计总体参数。

  20. VISHESH SHARMA 2018 年 5 月 17 日上午 12:16 #

    嘿 Jason,谢谢你的帖子。

    想要澄清一下:

    1. Bagging 是行子采样,而不是特征/列子采样?

    2. 在随机森林中,特征子采样是在每次分割时进行还是针对每棵树进行?

    3. 随机森林同时使用 Bagging(行子采样)和特征子采样?

    此致,

    • Jason Brownlee 2018 年 5 月 17 日上午 6:34 #

      是的,行采样。

      是的,在每个分割点都会执行特征采样。

      是的,两者都做。

  21. mohammed musthafa 2018 年 6 月 13 日下午 5:48 #

    我们可以使用这种方法预测一些数值还是仅用于分类?

  22. joe 2018 年 6 月 15 日下午 3:00 #

    Bagging 和随机森林有什么区别?

    • Jason Brownlee 2018 年 6 月 16 日上午 7:24 #

      好问题。

      Bagging 将使用最佳分割点从数据集的随机子样本中构建树。

      随机森林将使用整个数据集,但将通过数据集中的特征的随机子集选择树中的最佳分割点

  23. Pham Dat 2018 年 8 月 1 日下午 1:14 #

    嗨,Jason;

    您能给我解释一下随机森林、旋转森林和深度森林的区别吗?
    您在 Python 或 Weka 环境中实现了旋转森林和深度森林吗?如果是,请发送链接。非常感谢

  24. Tanweer 2018 年 8 月 9 日下午 12:56 #

    用通俗易懂的语言解释得非常好。非常感谢

  25. Asm 2018 年 8 月 10 日上午 1:45 #

    嗨,Jason,

    可以说 Bagging 在二元分类中的表现优于多元分类吗?
    如果真是这样,为什么呢?

  26. Leon C 2018 年 8 月 15 日上午 12:52 #

    嗨,Jason,
    你提到“因此,即使使用 Bagging,决策树也可能具有许多结构相似性,进而其预测结果具有高度相关性。”

    在这种情况下,高度相关性为什么是坏事?你能给我举个例子吗?

    • Jason Brownlee 2018 年 8 月 15 日上午 6:05 #

      当子模型的预测(误差)不相关或弱相关时,集成更有效。

  27. Vivek 2018 年 10 月 2 日下午 7:59 #

    嗨,Jason,很棒的文章。不过我有点困惑。

    正如您在文章中提到的,像 CART 这样的子模型将具有低偏差和高方差。元 Bagging 模型(如随机森林)将减少方差。由于子模型已经具有低偏差,我假设元模型也将具有低偏差。然而,我看到通常提到 Bagging 减少方差,但很少提到它也提供低偏差模型。您能解释一下吗?

    另外,如果 Bagging 给出低偏差模型并减少方差(低方差),那么我们为什么还需要 Boosting 算法?

    • Jason Brownlee 2018 年 10 月 3 日上午 6:17 #

      不,子模型具有低偏差和较高方差,Bagging 模型具有较高偏差和较低方差。

      这就是这种方法的魅力所在,我们可以通过组合许多低偏差模型来获得有用的较高偏差。

      Boosting 通过完全不同的方式实现类似的结果。我们需要多种方法,因为没有一种方法能很好地解决所有问题。

  28. Anitya 2018 年 10 月 9 日下午 1:04 #

    对于每个样本,通过找到最常见的预测(众数)来找到集成估计?

    通过将集成估计与真实值进行比较来计算方法的准确性?

    • Jason Brownlee 2018 年 10 月 9 日下午 3:05 #

      抱歉,我不明白,您能详细说明您的问题吗?

  29. Shenghuan 2018 年 12 月 6 日上午 9:36 #

    嗨,Jason,

    感谢您的好文章。
    我有一个问题,对于一棵树的每个节点,它们是否搜索相同的特征子集?或者对于每个节点,程序都搜索新的特征子集?

    再次感谢。

    • Jason Brownlee 2018 年 12 月 6 日下午 1:42 #

      在每个分割点都会创建并搜索新的子集。

  30. JinG 2019 年 1 月 22 日上午 1:05 #

    嗨 Jason,你说的“有放回地子采样”是指单行可以在一个子样本中多次出现吗?还是它不能出现,但可以在多个子样本中出现?谢谢。

    • Jason Brownlee 2019 年 1 月 22 日上午 6:24 #

      它可以在一个样本中多次出现。

      • vaid 2019 年 2 月 1 日下午 5:01 #

        那么,这是否意味着单行可以在单个树中多次出现……也就是说,如果我有 x1,x2…xn 行……假设 x1 在第一棵树中出现 2 次,而 x1,x2 在随机森林的第二棵树中出现 4 次

        • Jason Brownlee 2019 年 2 月 2 日上午 6:09 #

          一个分割点使用一个特征的一个值。相同或不同特征的不同值可以重复使用,甚至相同特征的相同值也可以重复使用——尽管我对此表示怀疑。

  31. Ken Popkin 2019 年 2 月 10 日上午 2:36 #

    嗨,Jason,

    我想我理解这篇文章,但是随着我阅读有关集成的知识,我变得越来越困惑。具体来说,应用它们是...

    选项 1:像选择使用集成算法一样简单(我正在使用随机森林和 AdaBoost)

    选项 2:它更复杂,也就是说,我应该以某种方式获取我其他算法(我正在使用逻辑回归、KNN 和朴素贝叶斯)的结果,并以某种方式将它们的输出用作集成算法的输入。

    我认为是选项 1,但如上所述,我一直在阅读的一些内容让我感到困惑。

    谢谢,

  32. Venu 2019 年 2 月 27 日上午 1:02 #

    你好,
    那么,随机森林中的每棵树都具有低偏差和高方差吗?
    我的理解正确吗?

    谢谢,
    Venu

  33. Aisha 2019 年 5 月 11 日上午 12:56 #

    你好,先生,

    感谢您的文章。
    我有一个关于使用 Bagging 进行时间序列预测的问题。

    实际上,我的基础数据由 500 天组成,每天都是一个时间序列(数据库:24 行(小时),500 列(天))
    我想应用 Bagging 来预测第 501 天。
    鉴于它将基础数据随机重采样为子集,并且每个子集随机进行一天预测,我该如何应用这种技术?
    聚合的结果一定是第 501 天吗?

    谢谢你

  34. Sanjeev Kumar TM 2019 年 7 月 23 日下午 10:59 #

    你好,
    实际上我用 4 个预测变量训练了模型,后来根据预测变量的重要性,一个变量对响应完全没有影响,所以我删除了该参数并训练了模型,但我发现使用 3 个预测变量获得的误差比使用 4 个预测变量的模型小。请帮助我,如果我删除了与响应变量完全无关的参数,为什么我会得到这个误差差异,误差是减少了还是保持不变?请帮助我。

    • Jason Brownlee 2019 年 7 月 24 日上午 7:55 #

      很可能“无用”的参数与其他参数存在非线性相互作用,实际上是有用的。

  35. Sanjeev Kumar TM 2019 年 7 月 23 日下午 11:00 #

    如何获得集成增强树模型中预测变量权重的系数。

  36. Priyanka Dave 2019 年 7 月 26 日下午 9:37 #

    嗨 Jason,我总共有 47 个输入列和 15 个输出列(都是连续值)。目前我正在研究随机森林回归模型。我的问题是

    1) 我们可以定义输入 -> 输出相关性或输出 -> 输出相关性吗?
    2) 我们可以告诉模型这些特定的输入集更强大吗?
    3) 我们可以按样本进行分类吗?
    4) 训练数据准确率达到 98%,但我仍然没有得到预期结果。因为模型无法识别特定输入的更改。

    谢谢。

  37. Briana T 2019 年 8 月 7 日上午 2:12 #

    我只想说这个解释非常好,而且易于理解!感谢您提供此内容。

  38. Luis Angel 2019 年 11 月 4 日上午 5:27 #

    非常感谢您的帖子。

    我只有一个简单的问题。样本不平衡会影响算法的性能吗?

  39. Neha Manpreet 2019 年 11 月 16 日上午 1:25 #

    如果 Bagging 使用整个特征空间,那么在 Python 中,BaggingClassifier 中有 max_features 选项。为什么会有 max_features 这个选项?

  40. Daniel 2020 年 1 月 4 日下午 7:02 #

    嗨,Jason,

    我对自助法感到困惑:我们如何能得到比计算出的均值“更好”的均值?

    我为什么要估计均值而不是计算它?

    谢谢,
    Daniel

  41. Daniel 2020 年 1 月 6 日上午 8:04 #

    明白了,谢谢。

  42. Anil 2020 年 1 月 9 日上午 9:03 #

    您好,Jason,
    我的问题是;
    – 随机森林算法是否默认包含 Bagging?那么当我使用随机森林算法时,我实际上是在做 Bagging 吗?
    – 如果随机森林算法默认包含 Bagging,并且我先将 Bagging 应用到我的数据集,然后再使用随机森林算法,我能获得更高的成功率或有意义的结果吗?

    • Jason Brownlee 2020 年 1 月 9 日下午 1:42 #

      是也不是。可以将其视为按特征进行 Bagging,而不是按样本进行 Bagging。您也可以通过为每棵树使用自助样本来按样本进行 Bagging。

  43. Paula García Llamas 2020 年 2 月 7 日下午 8:59 #

    嗨,Jason,

    我对回归中的 Bagging 有点困惑。

    我使用 1000 个总观测值运行随机森林,我将 ntree 设置为 1000,并计算均方误差估计值,从而计算基于袋外样本的解释方差。

    如果我的 ntree 是 1000,这意味着自助样本的数量是 1000,每个样本默认包含三分之二的采样点,三分之一用于获得袋外预测,这正确吗?

    那么我的训练集将是观测值的三分之二,测试集将是三分之一,对吗?

    谢谢你。

    • Jason Brownlee 2020 年 2 月 8 日上午 7:10 #

      是的,除了最后一句话。

      自助样本都是原始训练数据集的不同混合,因此您会获得全面的覆盖。

  44. samane 2020 年 2 月 25 日下午 8:29 #

    嗨,Jason。感谢您的完整解释。我有一个具有少量样本的高维数据(47 个样本和 4000 个特征),使用随机森林获取变量重要性还是使用深度学习更好?

    • Jason Brownlee 2020 年 2 月 26 日上午 8:17 #

      我建议测试一系列不同的算法,并找出哪种算法最适合您的数据集。

  45. Zamir 2020 年 3 月 31 日下午 1:53 #

    Jason,感谢您的清晰解释。

    我使用了 4 个变量来预测一个输出变量。重要性分析告诉我只有一个变量有用。然后,我使用随机森林和这个唯一的变量,得到了很好的结果。

    这是一种正确的方法和随机森林的使用吗?它也适用于 XGboosting 吗?

    谢谢,

    • Jason Brownlee 2020 年 4 月 1 日上午 5:44 #

      也许可以尝试一下并比较结果?

      • Zamir 2020 年 4 月 21 日上午 7:11 #

        谢谢你的回复,

        是的,两者都有相似的结果。这些机器学习模型只使用一个或两个预测变量是否正确?

        • Jason Brownlee 2020 年 4 月 21 日上午 7:45 #

          不确定是否“正确”,使用任何能产生最佳结果的方法。

  46. Larry Hertz 2020 年 5 月 4 日下午 9:11 #

    谢谢 Jason 的这篇文章!
    但我对 Bagging 仍有些困惑。如果行是随机有放回地提取的,那么特征的值可能会从最终样本中消失。因此,相关的决策树可能无法处理/预测包含此缺失值的数据。
    随机森林模型应该如何处理这种情况?如何防止这种情况发生?

    • Jason Brownlee 2020 年 5 月 5 日上午 6:26 #

      不,因为我们创建了数百或数千棵树,所有数据都有机会以概率方式贡献。

  47. Stephen O 2020 年 6 月 4 日上午 11:14 #

    嗨,Jason,

    非常感谢您的解释。

    1. 请问我有大约 152 口油井。每口油井都具有独特的属性,并且具有 1000 行和 14 列的时间序列数据。我将所有油井数据合并,得到 152,000 行和 14 列。我使用了 2 口油井的数据进行测试(2,000 行和 14 列),其余用于训练(2,000 行和 14 列)。随机森林回归模型在训练时表现良好,但在测试和新的未见数据上表现不佳。请问,问题可能出在哪里?

    2. 在使用随机森林之前进行标准化是否重要?

    3. 我可以指定在分割之前要考虑的特定输入变量/特征吗?

    请帮忙。非常感谢

  48. Stephen O 2020 年 6 月 4 日上午 11:54 #

    你好 Jason,

    请问,在哪些情况下我们应该使用 BaggingRegressor(带有决策树估计器),在哪些情况下我们应该使用 RandomForestRegressor?

    非常感谢

    • Jason Brownlee 2020 年 6 月 4 日下午 1:26 #

      算法与问题之间没有可靠的映射,相反,我们使用受控实验来发现哪种算法效果最好。

      测试两者,并使用对您的特定数据集而言更简单且性能最佳的一个。

  49. Stephen O 2020 年 6 月 4 日下午 12:05 #

    你好 Jason,

    请原谅我的命名问题。

    我正在开发一个在进行预测之前考虑所有特征的模型。我应该使用 BaggingRegressor 还是 RandomForestRegressor?

    谢谢你。

  50. Val 2020 年 7 月 28 日上午 9:20 #

    先生,您的工作非常出色,具有教育意义。先生,请问我想知道如何在 R 中绘制均方误差与迭代次数的关系。
    非常感谢您为我们所做的工作。

    • Jason Brownlee 2020 年 7 月 28 日上午 10:53 #

      抱歉,我没有这方面的 R 语言示例。

  51. Dinesh 2020 年 11 月 20 日下午 10:59 #

    先生,
    您能否解释一下当 sklearn 中 bootstrap = True/False 时,随机森林中的采样是如何进行的?

    • Dinesh 2020 年 11 月 20 日下午 11:08 #

      从上述问题中,

      我知道当 Bootstrap 为 TRUE 时:数据集的子采样(包含子行和子列)

      Bootstrap = False:每棵树考虑所有行。
      但是当 Bootstrap = False 时,列的采样情况如何呢?

      采样的意思是当 Bootstrap =true/False 时对列进行采样

    • Jason Brownlee 2020 年 11 月 21 日上午 6:40 #

      当为 False 时,我相信会使用整个数据集。当为 True 时,会进行有放回的随机抽样。

      这在文档中进行了解释:
      https://scikit-learn.cn/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html

  52. vian 2021 年 2 月 10 日下午 9:44 #

    你好,Jason 先生
    您能告诉我随机森林中特征重要性计算背后的数学原理吗?提前感谢。
    此致。

    • Jason Brownlee 2021 年 2 月 11 日上午 5:55 #

      不是一下子就能说清楚,也许可以查阅教科书或论文。

  53. Savitha 2021 年 3 月 31 日下午 8:37 #

    你好 Jason,
    我想知道 RandomForest 和 BaggingClassifier(max_features < 1 , bootstrap_features = True) 即子空间之间的区别是什么。在这两种情况下,我们都考虑较小的特征集来派生树。那么是什么让 RandomForest 变得特别呢?

    谢谢

    • Jason Brownlee 2021 年 4 月 1 日上午 8:12 #

      Bagging 将使用所有特征选择分割点,而随机森林使用特征的随机子集。

  54. Ajay A 2021 年 4 月 14 日下午 3:20 #

    嗨 Jason,OBB 能防止数据泄露吗?

    • Jason Brownlee 2021 年 4 月 15 日上午 5:22 #

      不。但它可以用有用的方式避免数据泄露。

  55. Genji 2021 年 4 月 14 日下午 5:43 #

    我喜欢这篇文章,句式非常好,所以很容易理解

  56. Leakey Mokaya 2021 年 9 月 24 日下午 12:01 #

    例如,如果一个数据集对于分类问题有 25 个输入变量,那么

    m = sqrt(25)
    m = 5

    问题:第二个 m 是等于 5 还是 8?

    • Adrian Tam
      Adrian Tam 2021 年 9 月 25 日上午 4:30 #

      为什么是 8?你有 25 个特征,每次分割最多考虑 5 个。这就是分类的意思。

  57. reza 2021 年 12 月 16 日上午 6:54 #

    嗨 Jason
    我使用了 Bagging 算法,但所有数据的结果都相同!!请指导我替换相同的算法

    • Adrian Tam
      Adrian Tam 2021 年 12 月 17 日上午 7:19 #

      你能解释一下你做了什么吗?

  58. Uche 2022 年 5 月 20 日上午 4:08 #

    你好 Jason,

    您的博客是救星。我有一个因变量,其范围是 1-10。我还有 2 个数值自变量和 10 个李克特量表为 1-5 的自变量。当我进行相关性分析时,其中 4 个自变量高度相关。我还使用随机森林进行了变量重要性分析,发现两个高度相关的变量是最重要的。我的问题是:

    1) 我是否应该将范围为 1-10 的因变量更改为二元(虚拟变量)1 和 0,还是应该不更改它们而继续使用?

    2) 为了避免多重共线性问题,我是否必须根据随机森林中重要性最低的变量移除高度相关的变量,然后再次运行随机森林?还是我应该在不移除重要性最低但高度相关的变量的情况下得出结论?

    • James Carmichael 2022 年 5 月 20 日下午 11:06 #

      嗨 Uche...感谢您的反馈和支持!请澄清您模型的一些目标,以便我们更好地协助您。

发表回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。