Random Forests - 林子大了,什么树都有

本文参考自Layman’s Introduction to Random Forests

  在machine learning中,随机森林(Random Forests)是一个包含多个决策树(decision tree)的分类器,其输出的类别由个别树输出的类别的众数决定[1]。如何从一个比较通俗易懂的角度来理解这座森林呢?
  某天你想看某部电影但你不确定自己是否会喜欢,此时你可能会问你的好友小赵,问他认为你会不会喜欢这部电影。这个小赵是个非常认真负责的人,他想先了解了解你喜欢哪种类型的电影。于是你给了小赵一份电影清单,上面写了你喜欢哪些电影,不喜欢哪些电影(a labeled training set)。于是小赵去豆瓣上查这些电影的相关信息,他把每一部电影转换成一个特征向量:(导演,编剧,主演,类型,国家,语言,片长…),接着在小赵心目中,就建立起了一套判断准则,这个判断准则中有一系列的衡量标准,譬如动作片+有xxx出演->喜欢,或者爱情片+悲剧->不喜欢等等。此时小赵就变成了一棵decision tree。你问小赵你会不会喜欢某部电影,小赵就会根据之前建立起来的规则,猜测你喜欢或者不喜欢。

  但是小赵只是一个人类,他并不总能很好的归纳出你的偏好。为了得到更加准确的建议,你可能不仅仅去问小赵,而是去问更多的朋友小钱、小孙、小李、小周、小吴。此时每个好友都代表一颗decision tree,而每次你想知道你是否会喜欢某部电影X时,你会问每个好友,当多数人认为你会喜欢电影X时,你才去看它。此时你就拥有了一座充满decision tree的森林,专业一点的讲法是一个ensemble classifier
  前面说到,你在建立decision tree时,需要给每个人一份记录你喜欢和不喜欢电影的清单,但是如果你给每个人一模一样电影清单,那每个人变成的decision tree也会是一模一样,这样的话问那么多人就没有意义了。为了让每棵decision都长得不一样,你打算给每个人的电影清单也不大一样。为什么要这么做呢?因为事实上连你自己也无法确保你给的电影清单是完全准确的。譬如说你告诉小赵你非常喜欢《泰坦尼克》,但有可能你喜欢它仅仅是因为看《泰坦尼克》的那天是你生日,你的心情很愉悦,你并不是真的有非常喜欢,因此这条记录是有偏差的,如果不把你喜欢《泰坦尼克》这件事告诉其他的朋友,那么其他的朋友所建立的decision tree就不会受到这个偏差的影响。因此你给每个朋友的电影清单都有略微的不同,譬如你告诉小赵你喜欢《盗梦空间》和《泰坦尼克》,讨厌《阿凡达》,但是告诉小张你喜欢《盗梦空间》,讨厌《阿凡达》但是没有提到《泰坦尼克》。这么一来小赵和小张建立的decision tree就可能会有很大的不同。
  利用这种ensemble的方法,每个好友对你的了解都不一样,因此可能给出一些具有特质化的意见,小赵可能认为你喜欢看莱昂纳多主演的电影(因为你告诉他你喜欢《盗梦空间》和《泰坦尼克》),而小张可能认为你喜欢看爱情片(因为你只告诉他你喜欢《泰坦尼克》)。
  除此之外,还有一种情况,你同时喜欢某几部电影,并不是因为这几部电影都是由某个电影明星主演,而是因为其他方面的原因,对于这些电影,你并不希望你朋友在建立decision tree的时候考虑到电影主演的信息,即你希望把主演从电影的特征向量中删去。
  这样一来,你的这些好友所建立的decision tree就成为了一座森林。当你想知道你是否会喜欢某部电影时,你会去问这座森林里的每一棵树,当大部分树认为你会喜欢时,你就去看这部电影。

  之前提到的电影清单以及电影的特征向量,我们把他用表格来描述一下,可以长成这样:

movie 喜欢 导演 编剧 主演 类型 国家 语言
a 1 xxx foo iii 爱情 法国 法语
b 0 yyy bar jjj 动作 中国 中文
c 1 zzz baz kkk 悬疑 美国 英文

  那么我们可以来总结一下:

随机森林中每一棵树建立的依据是随机的,这个随机体现在两个方面:

  1. 建立模型时使用的data是随机的。(random in row - data level)
  2. 建立模型时使用的features是随机的。(random in column - model level)

Reference:

  1. wikipedia-随机森林

下集预告:
实践是检验真理的唯一标准,下一次我们将实战一下 random forests ,使用智能手机的加速度传感器以及陀螺仪的数据来预测当前用户的活动状态(站立,行走,跑步….)。

喜欢就分享一下吧