2015-07-10 93 views
5

我想了解随机森林是如何工作在英文而不是数学。任何人都可以给我一个关于这个算法的工作原理的简单解释吗?随机森林的一个简单的解释

据我所知,我们提供的功能和标签没有告诉算法哪个功能应该被归类为哪个标签?正如我以前做基于概率的朴素贝叶斯一样,我们需要知道哪个特征应该是哪个标签。我完全离我远吗?

如果我能用英语得到任何非常简单的解释,我会非常感激。

+5

https://www.quora。com /随机森林/如何做随机森林-work-in-laymans-terms – CoryKramer

回答

4

RandomForest使用所谓的装袋方法。这个想法是基于经典的偏差 - 方差折衷。假设我们有一套(如N)的过度拟合估计量具有低偏差但交叉样本方差很高。所以低偏差是好的,我们想保持它,高差异是不好的,我们想要减少它。 RandomForest尝试通过执行所谓的自举/子采样来实现此目的(如@Alexander提到的,这是对观察和特征的自举采样的组合)。预测值是单个估计值的平均值,因此低偏置属性可以成功保留。进一步用中心极限定理,这个样本平均值的方差有一个等于variance of individual estimator divided by square root of N的方差。所以现在,它既具有低偏差也具有低方差属性,这就是为什么RandomForest通常优于独立估计器的原因。

+0

为了稍微扩展Jianxun的上述优秀总结,RandomForest通常随机选择树中每个节点的三分之一属性对于回归问题(以及分类问题的属性数的平方根)。所以它是装袋(取原始数据的随机引导样本)和随机属性选择的组合。 – Alexander

8

我会尝试用简单的单词给出另一种补充解释。

随机森林是随机决策树的集合(sklearn中的数字为n_estimators)。 你需要了解的是如何构建一个随机决策树。

粗略地说,要从您的训练样本的子集开始构建随机决策树。在每个节点上,您将随机抽取一部分功能(数字由sklearn中的max_features确定)。对于这些功能中的每一个,您都将测试不同的阈值,并查看它们是如何根据给定标准(通常是熵或gini,sklearn中的参数criterion)分割您的样本。然后,您将保留最佳分割数据的特征及其阈值,并将其记录在节点中。 当树的结构结束时(可能是由于不同的原因:达到最大深度(sklearn中的max_depth),达到最小样本数量(sklearn中的min_samples_leaf)等),您看每个叶子中的样本并保留标签的频率。因此,它就像树根据有意义的特征为您提供了训练样本的划分。

由于每个节点都是从随机采集的特征构建而成,因此您明白以这种方式构建的每棵树都会有所不同。这有助于在偏差和方差之间做出妥协,正如@Jianxun Li所解释的那样。

然后在测试模式下,测试样本将遍历每棵树,为您提供每棵树的标签频率。最具代表性的标签通常是最终的分类结果。

4

加上上面的两个答案,因为你提到了一个简单的解释。这里写一个我认为是解释随机森林最简单的方法。

学分转到Edwin Chen的简单解释here非专业术语随机森林。发布如下。

假设你非常优柔寡断,所以每当你想看一部电影时,你会问你的朋友杨柳是否认为你会喜欢它。为了回答,Willow首先需要找出你喜欢的电影,因此你给她一些电影,并告诉她你是否喜欢每一部电影(即,你给她一个标记的训练集)。然后,当你问她是否认为自己喜欢电影X时,她会用IMDB播放20个类似于问题的游戏,并提问诸如“X是一部浪漫电影?”,“约翰尼·德普是否出演过X?”。 , 等等。她首先询问更多的信息问题(即她最大限度地获得每个问题的信息收益),并最终为您提供是/否的答案。

因此,杨柳是您的电影偏好的决策树。

但杨柳只是人类,所以她并不总是很好地概括你的偏好(即她过度适应)。为了获得更准确的建议,如果大多数人表示他们认为你会喜欢,你想问一群你的朋友并观看电影X.也就是说,你不要只问Willow,而是要问Woody,Apple和Cartman,他们会投票决定你是否会喜欢电影(例如,你建立了一个合奏分类器,在这种情况下又称为森林)。

现在你不希望你的每个朋友都做同样的事情并给你相同的答案,所以你首先给他们每个人稍微不同的数据。毕竟,你自己并不完全确定你的偏好 - 你告诉Willow你爱泰坦尼克号,但也许你那天只是开心,因为这是你的生日,所以也许你的一些朋友不应该使用你喜欢的事实泰坦尼克号提出他们的建议。或者,也许你告诉她你喜欢灰姑娘,但实际上你真的很喜欢它,所以你的一些朋友应该给灰姑娘更多的体重。所以,不要给你的朋友提供你给杨柳的同样的数据,而是给他们稍微困扰的版本。你不会改变你的爱/恨的决定,你只是说你喜欢/憎恨一些电影或多或少(正式地说,你给你的每个朋友一个引导版的原始训练数据)。例如,当你告诉Willow你喜欢Black Swan和Harry Potter并且不喜欢Avatar时,你告诉Woody你非常喜欢Black Swan,你看过两次,你不喜欢Avatar,并且根本没有提到Harry Potter。

通过使用这个合奏,你希望当你的每个朋友给出一些特殊的建议时(Willow认为你比吸血鬼电影更喜欢你,Woody认为你喜欢皮克斯电影,而Cartman认为你只是讨厌一切),大多数错误都被取消了。因此,你的朋友现在形成了你的电影喜好的袋装(引导聚合)森林。

但是,您的数据仍然存在一个问题。虽然你喜欢泰坦尼克号和Inception,但并不是因为你喜欢莱昂纳多迪卡普里奥的电影。也许你因为其他原因喜欢两部电影。因此,你不想让你的朋友都根据他们的建议来决定是否在电影中看电影。所以,当每个朋友向IMDB提出一个问题时,只允许随机选择一个可能的问题子集(例如,当您构建决策树时,在每个节点上选择要分割的属性时使用一些随机性,例如通过随机选择一个属性或通过从随机子集中选择一个属性)。这意味着你的朋友不能问Leonardo DiCaprio是否在他们想要的电影中。因此,之前您在数据级别注入了随机性,通过轻微扰乱您的电影偏好,现在您在模型级别注入随机性,方法是让您的朋友在不同的时间提出不同的问题。

所以你的朋友现在形成一个随机森林。