随机森林简单解释

通过一个直观的例子了解随机森林

学习技术概念时,我发现最好从一个高层次的概述开始,然后逐步深入细节,而不是从底部开始并立即迷路。 沿着这些思路,本文将使用一个直观的示例来提供随机森林的概念框架,这是一种功能强大的机器学习算法。 在掌握了基本概念之后,我将继续进行简单的实施,以了解该技术的工作原理以及它是否对我有用,然后再通过深入研究该理论来最终确定细节。 考虑到这一点,在理解了这里随机森林的概述之后,请随意阅读本文的第二部分,这是一个用Python代码编写的端到端示例。 综上所述,这两篇文章将帮助您攻克学习过程的前两个步骤,并为您准备好充分深入研究随机森林和机器学习的准备!

决策树:构建基块

要了解随机森林模型,我们必须首先了解决策树,即随机森林的基本构建块。 我们所有人都在日常生活中使用决策树,即使您不知道这个名字,我也相信您会认识到这一过程。 为了说明这个概念,我们将使用一个日常示例:预测我们城市明天的最高气温。 为使事情顺利,我将使用华盛顿州的西雅图,但请随意选择自己的城市。

为了回答单个最高温度问题,我们实际上需要完成整个系列的查询。 我们首先根据领域知识形成一个初始的合理范围,如果我们不知道一年中的开始前的时间,那么对于这个问题可能是30-70度(华氏度)。 通过一系列问题和解答,我们逐渐缩小了范围,直到我们有足够的信心做出单个预测。

有什么好问的? 好吧,如果我们想尽可能地限制范围,那么考虑与当前问题相关的查询将是明智的。 由于温度高度依赖于一年中的时间,因此一个合适的起点是:什么季节? 在这种情况下,季节是冬季,因此我们可以将预测范围限制在30–50度,因为我们对冬季期间西北太平洋的总体最高温度有所了解。 第一个问题是一个不错的选择,因为它已经将我们的范围缩小了一半。 如果我们问了一些不相关的问题,例如一周中的某天,那么我们根本不可能减少预测的范围,我们将回到起点。 尽管如此,这个问题还不足以缩小我们的估计范围,因此我们需要查找更多信息。 一个很好的后续问题是:这一天的历史平均最高温度是多少? 对于12月27日的西雅图,答案是46度。 这使我们可以将考虑范围进一步限制在40-50度之间。 同样,这是一个高价值的问题,因为它大大缩小了我们的估计范围。

有两个问题仍不足以做出预测,因为今年可能比平均温度高或低。 因此,我们也想看看今天的最高温度,以了解一年中的异常炎热或寒冷。 我们的问题很简单:今天的最高温度是多少? 如果今天的最高温度是43度,那么今年可能会更冷,我们对明天的估计应该比历史平均水平低一点。 在这一点上,我们可以对明天的最高温度做出44度的预测充满信心。 如果我们想更加确定,可以咨询AccuWeather或Weather Underground等其他来源,以获取信息,例如可以纳入心智模型的最高温度的预测。 但是,在某个时候,问更多问题的回报越来越小,我们永远无法继续收集更多数据。 现在,让我们使用这三个问题做出预测。

因此,为了得出估计值,我们使用了一系列问题,每个问题都会缩小我们的可能值,直到我们有足够的信心做出单个预测。 我们在日常生活中一遍又一遍地重复此决策过程,只是问题和答案不断变化。 此时,我们几乎已经准备好与决策树建立连接,但是让我们花一点时间看一下为找到答案而采取的直观步骤的图形表示:

温度预测决策过程

我们首先根据对世界的了解进行初步猜测,然后随着获得更多信息而完善我们的估计。 最终,我们停止收集数据并做出决定,在这种情况下,这是最高温度预测。 解决问题的自然方法就是所谓的问答流程图。 实际上,该流程图也是决策树的基本模型! 但是,我们还没有建立完整的决策树,因为作为人类,我们采取了一些对我们有意义的捷径,但对于机器而言却不是那么直观。

我们所说明的决策过程与实际决策树之间有两个主要区别。 首先,我们忽略了列出替代分支,也就是说,如果对问题的答案不同,我们将做出的预测:例如,如果季节是夏天而不是冬天,那么我们的预测范围将会改变更高。 此外,我们对问题进行了措辞,以便它们可以回答许多问题:当我们问“今天的最高温度是多少?” 答案可能是任何真正的价值。 相反,在机器学习中实现的决策树将列出每个问题的所有可能替代方案,并以对/错的形式提出所有问题。 这有点难于理解,因为这不是人类自然的想法,也许显示这种差异的最好方法是从我们的预测过程中创建真实的决策树:

用于温度预测的机器学习决策树

我们马上注意到,每个问题(白色方框)只有两个答案:对或错。 此外,对于每个对与错答案,都有单独的分支。 无论问题的答案是什么,我们最终都会做出预测(以绿色方框显示)。 决策树的这种“计算机友好”版本可能看起来与我们的直观模型不同,但其工作方式完全相同。 从左侧的节点开始,然后遍历树,一路回答问题。 对于我们的示例,季节是冬天,因此我们选择True分支。 我们说历史平均水平是46,所以第二个问题也是正确的。 最后,第三个答案是True,因为今天的最高温度是43。因此,最终的预测是明天的最高温度40度,接近我们的猜测44。

这里的模型包含了决策树的所有基本特征。 我故意遗漏了所有技术细节,例如“问题”的形成方式和阈值的设置方式,但是对于从概念上理解模型甚至在Python代码中实现该模型,这些实际上并不是必需的!

我应该提到的决策树的一方面是它如何实际学习。 我们根据问题的答案如何适应我们的世界框架来完善我们的估计范围。 如果季节是冬天,我们的估计值会低于夏天。 但是,决策树的计算机模型没有先验知识,也永远无法独自使连接“冬天=更冷”。 它必须从我们提供的数据中了解有关该问题的所有信息。 由于我们的日常经验,我们知道如何将流程图中的答案转化为合理的预测。 相反,必须教给模型这些关系中的每一个,例如,如果今天的温度比历史平均温度更高,那么明天的最高温度也可能会更高。 作为有监督的机器学习模型,随机森林学习在模型构建的训练(或拟合)阶段将数据(今天的温度,历史平均水平等)映射到输出(明天的最高温度)。

在训练期间,我们向模型提供与问题域相关的任何历史数据(前一天的温度,一年中的季节和历史平均值),以及我们希望模型学习预测的真实值。明天要达到最高温度。 该模型学习数据(在机器学习中称为特征)与我们要预测的值(称为目标)之间的任何关系。 决策树形成了上面显示的结构,计算出要提出的最佳问题,以便做出最准确的估计。 当我们要求决策树对明天进行预测时,我们必须给它提供与训练期间使用的数据(功能)相同的数据,并根据所学的结构对我们进行估算。 就像人类从示例中学到的一样,决策树也从经验中学习,除了它没有任何先前的知识可以将其纳入问题之外。 在训练之前,就我们进行合理估计的能力而言,我们比树“聪明”得多。 但是,在对高质量数据进行足够的训练之后,决策树将远远超过我们的预测能力。 请记住,即使经过培训,决策树对问题也没有任何概念上的理解。 从模型的“角度”来看,它只是接收数字作为输入,并输出与训练期间看到的数字一致的不同数字。 换句话说,树已经学会了如何在不了解温度的情况下将一组特征映射到目标。 如果我们向决策树询问另一个与天气有关的问题,由于已经针对一项特定任务进行了培训,因此它不知道如何响应。

这基本上就是决策树的整个高级概念:导致预测的问题流程图。 现在,我们从单一决策树飞跃到随机森林!

从决策树到随机森林

我对最高温度的预测可能是错误的。 我不愿意将它交给您,但是您也是如此。 有太多因素需要考虑,并且机会是,每个人的猜测都会很高或很低。 每个人都有不同的背景知识来回答问题,并且对问题的完全相同的答案可能完全不同。 用技术术语来说,预测是有差异的,因为它们会在正确答案周围广泛传播。 现在,如果我们从成百上千个个体中做出预测,决定其中一些平均值很高,而其中一些预测值很低,该怎么办? 好了,恭喜,我们创建了一个随机森林! 随机森林背后的基本思想是将许多决策树组合成一个模型。 个别而言,决策树(或人类)所做的预测可能不准确,但将它们组合在一起,则平均而言,预测将更接近标记。

为什么随机森林比单个决策树更好? 我们可以考虑一下,由数百个人对最高温度问题进行估算:通过汇总预测,我们可以吸收比任何人都多的知识。 每个人都有自己的背景经验和信息来源来解决问题。 有些人可能会对Accuweather发誓,而另一些人只会关注NOAA(国家海洋和大气管理局)的预测。 也许一个人依靠气象学家朋友的预测,而另一个人则使用数百年的温度数据。 如果只问一个人,我们只会利用他们有限的信息范围,但是通过将每个人的预测结合在一起,我们的信息网就更大了。 此外,每个人的信息源越多样化,随机森林就越健壮,因为它不会受到单个异常数据源的影响。 如果NOAA变得无赖并开始进行100度以上的预测,而每个人都依赖NOAA,那么我们的整个模型将一文不值。 如果相反,我们“森林”中的个人使用多种不同的天气来源,那么我们的模型将不会受到单一来源的很大影响,因此我们可以继续做出合理的预测。

为什么叫“随机森林”? 嗯,就像人们可能依赖不同的来源进行预测一样,森林中的每个决策树在形成问题时都会考虑特征的随机子集,并且只能访问随机的一组训练数据点。 这增加了森林的多样性,从而导致更可靠的总体预测和“随机森林”的名称。 当需要进行预测时,随机森林将获取所有单个决策树估计值的平均值。 (对于回归任务来说就是这种情况,例如我们预测温度连续值的问题。另一类问题称为分类,其中目标是离散的分类标签,例如多云或晴天。在这种情况下,随机森林将对预测类别进行多数投票)。 考虑到这一点,我们现在将随机森林的所有概念部分都删除了!

包起来

机器学习乍一看似乎令人生畏,但整个领域只是许多简单的想法组合在一起,以产生可以从过去的数据中“学习”的极其精确的模型。 随机森林也不例外。 随机森林背后有两个基本概念,在我们的日常生活中,我们都熟知这两个基本概念:

  1. 构建导致决策的问答流程图
  2. (随机和多样化)人群的智慧

这些基本思想的结合导致了随机森林模型的强大。

现在,您希望拥有一个随机森林的概念框架,我建议您看一下本文的第二部分,我们将逐步介绍在Python编程语言中实现最高温度问题的随机森林的整个过程。 即使您以前从未编程过,也应该可以继续学习! 如果这篇文章激发了您的好奇心,那么有很多资源可以了解更多。 有时,当尝试学习一个新概念时,太多的资源可能会让人不知所措,因此,我的建议仅限于由随机森林(Leo Breiman),免费的Coursera系列随机森林的创建者和出色的作者创建的出色网站《统计学习入门》(James,Witten,Hastie和Tibshirani撰写)可在线免费获得。 总体而言,编程尤其是机器学习使在线免费提供的资源如此之多,甚至可以超过或超过任何正规的教育,如果您从未在大学中见过这种感觉,就好像您落后了!

一如既往,我感谢任何反馈和建设性的批评。 我的电子邮件是wjk68@case.edu。