随机森林是如何工作的 2013-04-08

假如你是个很难做出决定的性格,如果你想去看一部电影,你会去问你的朋友柳妹,她是否认为你会喜欢这部电影。为了回答你的问题,柳妹需要先找出你喜欢的电影。所以你给她一堆的电影,告诉她你喜欢哪一部和不喜欢哪一部(即,你给她一个标记好的训练集)。然后当你问她你是否喜欢某部电影时,她就像IMDB网站一样来问你20个类似以下的问题:这是一部浪漫的电影吗?这是不是约翰尼的作品?等等。她首先问的总是信息量最大的问题(即,她最大化每个问题的信息增益),并在最后给你一个是否喜欢的答案。

此时,柳妹是你电影偏好的决策树。

但是柳妹也只是一个人而已,所以她不总是能很好的概括你的喜好(即,她过拟合)。为了得到更精确的建议,你得要问你的朋友们,如果大多数人说你会喜欢这部电影,那你就去看它。不止是问柳妹一个人,你也去问五弟、艾婆、卡特妈,然后他们投票决定你是否喜欢这部电影。(即,你建立一个集成分类器,这种情况也称之为森林)。

现在你不想每个朋友都做同样的事情,给你相同的答案,因此你先给他们每个人各自稍微有点不同的数据。毕竟你不能肯定自己的喜好——你告诉柳妹你喜欢泰坦尼克,但也许只是因为那天是你的生日,你心情好才喜欢的,你的某些朋友可能不应根据你喜欢泰坦尼克这个事情来给你建议;又或者你告诉柳妹你喜欢仙度瑞拉,但实际上你真的很喜欢它,你的某些朋友应该要给它更高的权重才是。总而言之,不要让你的朋友们得到与柳妹相同的数据,而是给他们稍加扰动的版本。并不必改变说喜欢/讨厌的决定本身,而是可以说稍微多喜欢/讨厌某些电影(你给每个朋友一个原始训练数据bootstrap抽样后的版本)。例如你告诉柳妹你喜欢黑天鹅和哈利波特而不喜欢阿凡达,同时你告诉五弟你非常喜欢黑天鹅以至于看了两次,虽然你不喜欢阿凡达,但对五弟却一点都不提及阿凡达。

利用这种集成方法,你希望你的每个朋友都有些特别的建议(柳妹认为你真心更喜欢吸血鬼电影,五弟认为你喜欢皮克斯电影,卡特妈认为你什么都不喜欢看),大多数的误差都被抹掉了。因此,你的朋友现在形成了一个你电影偏好的装袋(bootstrap aggregated)森林。

然而还有一个问题:当你同时喜欢泰坦尼克和盗梦空间,而这并非由于你喜欢电影明星莱昂纳多,也许由于其他原因。因此你不想要你的朋友们都基于一部电影中有没有莱昂纳多而给出建议。所以当每个朋友问你IMDB式的问题时,被允许问的问题是从全部问题里随机选取的子集(即,当你在建立决策树时,在节点选择分裂属性时加入一些随机性,也就是说通过随机选择某些属性,或者在随机选择的子集里面选择属性)。这意味着你的朋友不允许问有没有莱昂纳多这个问题,无论他们想不想问。因此尽管之前通过轻微扰动你的电影偏好,在数据层面注入了随机性,现在还通过使你的朋友在不同时间询问不同的问题,而在模型层注入了随机性。

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

以上内容翻译自Quora

译者注:所以随机森林就是样本抽样(行抽样)+特征抽样(列抽样)的树的集合。



Powered by Jekyll on GitHub | ©2016 Meroa | Last modified: 2018-02-03