随机森林的简单解释

10

我试图理解随机森林是如何工作的,而不是通过数学来解释。有没有人能给我一个非常简单的说明这个算法是如何运作的?

据我所知,我们将特征和标签输入模型中,但并没有告诉算法哪些特征应该被分类到哪个标签下面?而像朴素贝叶斯算法则需要明确指定每个特征所对应的标签。我理解得对吗?

如果我能得到任何非常简单的说明,我会非常感激。


6
当使用随机森林算法时,会建立多个决策树模型并对其进行组合以提高预测准确性。每个决策树都基于一个子集特征和训练数据进行构建,然后使用袋装法来将它们汇总成一个模型。在进行预测时,随机森林算法将通过多数表决法来确定最终预测结果。此外,随机森林还能够计算出重要特征并进行特征选择。 - Cory Kramer
3个回答

12
RandomForest 使用所谓的装袋方法(bagging approach)。这个想法基于经典偏差-方差权衡。假设我们有一组过度拟合的估计器(例如N个),它们具有低偏差但高交叉样本方差。所以说,低偏差是好的,我们希望保留它,高方差是不好的,我们希望降低它。RandomForest 通过进行所谓的自助法/子采样 (正如@Alexander 所提到的,这是对观察和特征进行bootstrap采样的组合)来实现这一点。预测是个体估计器的平均值,因此低偏差属性得以成功保留。并且进一步通过中心极限定理,该样本平均值的方差等于个体估计器的方差除以N的平方根。 因此,现在它具有低偏差和低方差的属性,这就是为什么 RandomForest通常优于单独的估计器。

为了略微扩展Jianxun上面的优秀总结,对于回归问题,随机森林通常在树的每个节点上选择三分之一的属性进行随机采样(对于分类问题,则选择属性数量的平方根)。因此它是自举聚合(对原始数据进行随机自举抽样)和随机属性选择的组合。 - Alexander

11

在上述两个回答的基础上,既然你提到了一个简单的解释。这里有一个写作,我认为这是你可以解释随机森林最简单的方法。

感谢 Edwin Chen 在这里用通俗易懂的语言为随机森林做出了贡献。以下是相同内容。

假设你非常优柔寡断,所以每当你想看电影时,你会问你的朋友 Willow 是否认为你会喜欢它。为了回答这个问题,Willow 首先需要确定你喜欢哪些类型的电影,因此你给她一堆电影并告诉她你是否喜欢每一部电影(即,你给她一个标记好的训练集)。然后,当你问她是否认为你会喜欢电影 X 时,她会与 IMDB 玩类似于20问的游戏,问像“X 是一部浪漫电影吗?”、“约翰尼·德普主演 X 吗?”等问题。她首先问更具信息量的问题(即,最大化每个问题的信息增益),并在最后给出一个是/否答案。

因此,Willow 是你的电影喜好的决策树。

但是 Willow 只是个人,所以她不能很好地概括你的偏好(即,她过度拟合)。为了得到更准确的建议,您想问一些朋友并在大多数人说他们认为你会喜欢它时观看电影 X。也就是说,除了只询问 Willow 外,您还想问 Woody、Apple 和 Cartman,并且他们对于是否喜欢一个电影进行投票(即,在这种情况下构建一个集成分类器,也称为森林)。

现在您不希望每个朋友都做同样的事情并给出相同的答案,因此您首先为每个朋友提供稍微不同的数据。毕竟,您自己也不确定自己的喜好 - 您告诉 Willow 您喜欢《泰坦尼克号》,但也许那天只是因为过生日而感到开心,所以一些朋友不应该在推荐中使用您喜欢《泰坦尼克号》这一事实。或者你告诉她你喜欢《灰姑娘》,但实际上你非常非常喜欢它,所以有些朋友应该更重视《灰姑娘》。因此,您不会向朋友们提供与您向 Willow 提供的相同数据,而是提供略有扰动的版本。您不会改变您的爱/恨决定,只是说您对某些电影的喜爱/厌恶程度略微增加或减少(严格来说,您为每个朋友提供原始训练数据的引导版本)。例如,您告诉 Willow 您喜欢《黑天鹅》和《哈利·波特》并不喜欢《阿凡达》,而您告诉 Woody 您非常喜欢《黑天鹅》,看了两遍,您不喜欢《阿凡达》,根本没有提到《哈利·波特》。
通过使用这种集成方法,您希望虽然每个朋友都会给出略微独特的推荐(Willow 认为您喜欢吸血鬼电影比您实际更喜欢,Woody 认为您喜欢皮克斯动画片,而 Cartman 则认为您只是什么都不喜欢),但大多数错误在多数的情况下会被抵消。因此,您的朋友们现在形成了您电影偏好的一个袋装森林(bootstrap aggregated forest)。然而,你的数据仍有一个问题。虽然你喜欢《泰坦尼克号》和《盗梦空间》,但并不是因为它们都有莱昂纳多·迪卡普里奥出演。也许你喜欢这两部电影的其他原因。因此,你不希望你的朋友们仅仅基于迪卡普里奥是否出演一部电影来推荐电影。因此,当每个朋友向IMDB提出问题时,只允许随机选择其中一部分可能的问题(即,在构建决策树时,每个节点上使用一些随机性来选择要拆分的属性,例如通过随机选择属性或从随机子集中选择属性)。这意味着你的朋友们不能在想问是否有莱昂纳多·迪卡普里奥出演的电影时随意提问。因此,之前你在数据层面注入了随机性,通过微调你的电影偏好,现在你在模型层面注入了随机性,使你的朋友们在不同的时间提出不同的问题。

因此,你的朋友们现在形成了一个随机森林。


10

我将尝试用简单的话给出另一种补充性解释。

随机森林是由多个随机决策树组成的(在sklearn中,数量由n_estimators确定)。你需要理解如何构建一个随机决策树。

粗略地说,要构建一棵随机决策树,首先选取部分训练样本。在每个节点上,您会随机选择一些特征(数量由max_features在sklearn中指定)。对于这些特征,您将测试不同的阈值并根据给定的标准(通常是熵或基尼系数,在sklearn中为criterion参数)将样本分割。然后保留最佳分割数据的特征及其阈值,并记录在节点中。 当树的构建结束时(可以是因为达到了最大深度(在sklearn中为max_depth)、达到了最小样本数(在sklearn中为min_samples_leaf)等等),您将查看每个叶子中的样本并记录标签的频率。 因此,就像树根据有意义的特征对训练样本进行了划分一样。

由于每个节点都是从随机选择的特征中构建的,因此您可以理解以这种方式构建的每棵树都不同。这有助于在偏差和方差之间获得良好的折衷,正如@Jianxun Li所解释的那样。

然后,在测试模式下,每个测试样本将通过每棵树,为您提供每棵树的标签频率。通常最重要的标签是最终的分类结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接