机器学习技法10: 随机森林(Random Forest)



上一节课介绍了决策树算法,其核心思想是通过递归的方式将输入空间进行多次划分,C&RT的标准是以不纯净度为目标函数进行切分,知道分支的不纯净度接近零为止,为了防止过拟合,其还通过决策树修剪(prun)起到正则化的效果。切分完成后,得到不同的树叶,即不同的假设函数 gt(x)g_t(x) ,实际上为常数,最后通过融合形成决策树的假设函数 G(x)G(x) 。本节课介绍随机森林算法(Random Forest),它实际上是Bagging和决策树的结合。

10.1 Random Forest Algorithm

首先回顾一下,之前学习的两类集成学习算法。Bagging通过bootStrapping(拔靴法)从原始数据集抽样得到不一样的样本子集,然后使用基本的算法那训练这些样本子集得到不同的假设函数 gtg_t ,最后使用这些假设函数进行投票,融合成Bagging模型。决策时通过递归的方式将输入空间进行多次划分,划分完成后,得到不同的假设函数 gtg_t,然后融合这些不同的假设函数。
在这里插入图片描述

这两类算法各有其特点。其中,Bagging可以减少偏差;决策树对输入空间的变化敏感,偏差比较大。如果将两者结合,既能结合二者的优点,又能弥补各自的不足,就得到了随机森林算法(Random Forest,RF),“R” 表示Bagging的过程,“F” 表示生成完全成长树的过程,得到很多树,好比森林,由此得名。其伪代码如下:
在这里插入图片描述

其核心思想是首先用Bagging的方式划分数据集,然后使用决策树进行训练,得到假设函数 Gc(x)G_c(x) ,最后通过Bagging的方式进行投票,融合这些不同的假设函数,得到随机森林的假设函数 G(x)G(x)。其优点是Bagging的部分非常容易实现并行处理,因为各部分互不影响,此外,决策树本身就是一类很有效率的算法,二者结合使得随机森林的计算过程更有效率;同时,还吸收了C&RT的优点,即可以很容易的处理二分类、多分类和回归问题,同时克服了C&RT对输入空间变化敏感的缺点。

Bagging算法的关键是通过拔靴法随机抽取不同的子集,然后使用基本的演算法训练得到不同的假设函数,那么还有没有其它方式得到这些假设函数呢?一种思路是从对数据中的特征做随机抽样,来得到不同的决策树,比如从输入数据100维的特征中随机抽取10个特征使用上述演算法训练;这个抽样过程相当于做了一个向低纬度投影的动作。此时,随机森林的输入空间的维度就是原来输入空间的一个子空间。此举的目的是希望得到不同的树,这样融合之后的随机森林模型的能力会更强。一种常用的做法是在使用C&RT进行二叉树划分时,都从特征输入空间随机重采样得到子空间,使用子空间的数据进行训练得到不同的假设函数。
在这里插入图片描述

此外,更一般地,上述过程可以看做对原来的特征输入空间乘以一个投影矩阵 PP ,这样就可以沿任意方向进行投影;相比沿固定方向进行投影的方法会使得模型更有鲁棒性。通常随机森林的这些投影方式,是低纬度的投影,什么意思呢?比如原始的特征输入空间有100维,随机森林算法可能每次只从其中随机抽取三个维度的特征,将其组合(random combination),然后使用C&RT算法做切割。作者建议,每次在 C&RT 进行二叉树划分时,使用低纬度的投影,从原来的特征输入空间提取子空间。至此,其名为Random Forest也就不难理解了,因为存在大量的随机抽样,并且得到很多的决策树。
在这里插入图片描述


习题1:
在这里插入图片描述


10.2 Out­-Of­-Bag Estimate

首先回顾之前所学的Bagging算法:
在这里插入图片描述
上图中,标红的位置标示在某次抽样中没有被抽取到,记这些没有被抽到的样本为 gtg_t 的 Out-Of-Bag(OOB)样本。下面计算在N比较大时,没有抽样中,有多少样本为OOB样本。
在这里插入图片描述
由以上计算可知,每次抽样的OOB样本为:
在这里插入图片描述
即每次抽样有大约三分之一的样本没有被抽到。下面对比OOB与Validation的区别:
在这里插入图片描述
Validation中,使用训练集 DtrainD_{train} 得到假设函数 gg^{-} ;使用验证集 DvalD_{val} 验证这些假设函数的表现。 DtrainD_{train}DvalD_{val} 没有交集。同理,在OOB中,标红的样本也没有用到,并且数量上与 DvalD_{val} 很相似,因此其性质也与之相似,可以使用这些OOB样本来验证 gtg_t 是否足够好,但是Bagging、RF之类的融合模型,其目的是得到 GG,而不是 gg ,所以没必要验证 gg,而是验证 GG
在这里插入图片描述
GN(x)G^{-}_{N}(x) 是由OOB表中没有使用 (xN,yN)(x_N,y_N) 样本的假设函数组成。
在这里插入图片描述
由上式可知,Bagging或RF算法可以做自我验证(self-validation),自我验证的误差可以用 EoobE_{oob} 表示,而无需另外的验证过程。


习题2:
在这里插入图片描述


10.3 Feature Selection

特征空间的维度是影响算法复杂度的因素之一。如何选择合适的特征输入空间,去除冗余特征,是机器学习特征工程需要考虑的问题。在本节课程中,对于输入空间是10000维的特征,如果直接使用这些特征做分类,显然有大量的特征是冗余的,不光处理数据麻烦,而且训练周期长,会导致过拟合。如果现在可以从中选出300维具有代表性的特征,则可以大大简化算法复杂度。这个选择的过程,相当于做了一个从高维度到低维度的特征转换,使用转换后的特征再做进一步的学习。选择特征有如下好处:

  • 效率高:特征空间维度少,算法复杂度低,训练和推理时间短;
  • 泛化能力好:相当于排除了9700维的噪声数据;

其缺点是:

  • 选择过程的计算量大:C10000300C^{300}_{10000}
  • 选择过程引入噪声:比如选择的特征看起来很好,但实际上可能是噪声数据,从而导致过拟合;
  • 选择的特征可解释性低:选择特征只能知道其相互之间的关联性,并不知道之间的因果关系。

对于决策树来说,其在进行二叉树划分过程中,已经包含了特征选择过程。由以上分析可知特征选择过程,其实是一个组合爆炸的问题,那么应该如何选择特征呢?解决组合爆炸的简单思路是:如果不考虑各组合之间的相互关系,只关注给每一个特征打一个分数,即表征某个特征的重要性,然后按照这些重要性排序,从中选择前300个重要的即可。这个想法在线性模型中很容易实现,相当于做了加权组合。
在这里插入图片描述
可以使用 wi|w_i| 的大小来表征某一个特征 ii 的重要性。一个好的 ww 可以从数据中学习。以上是对于线性模型的情况,如果是非线性模型呢?比如随机森林,因为其内部的机制使得其计算相对于其它非线性模型更容易。基本的想法是 random test,比如现在某一个特征很重要,如果其中还包含一些噪声,此时学习的表现一定会变差。如果比较原来的特征和包含噪声的特征的差距,就可以知道现在的特征有多重要。那么应该添加什么样的噪声呢?
在这里插入图片描述

  • 一种想法是使用高斯噪声,但会有一个问题就是原来的数据分布不符合高斯分布的时候,添加高斯噪声使得误差变为了两个部分;
  • 另一种思路是使用拔靴法(bootstrap),其做法是将原来的N个样本的第 ii 个特征重新打乱,然后添加到这N个样本中,这样可以保证添加的噪声与原来的数据分布相同。这种方法叫做随机排序测试(Permutation Test)。
    在这里插入图片描述
    上式说明,如果二者差异很大,则表明第 ii 个特征是重要的。下一步探讨如何衡量添加噪声数据的表现。一般方法是重新训练得到不一样的 GG,然后再做验证。对于RF算法,使用 OOB计算误差即可。但是对于N个样本的第 ii 个特征重新打乱之后的样本集 D(p)D^{(p)} ,对其进行训练;并且每个特征都要训练,然后与未添加噪声的数据集的表现进行对比,计算过程很繁琐。为了简化计算,RF的作者建议在使用OOB样本验证时,将OOB样本的第 ii 个特征打乱,然后再验证G的表现,这就不用重新训练G了,达到降低算法复杂度,减少训练和推理时间的目的。
    在这里插入图片描述

通过以上流程就可以得出各个特征的得分,进而可以进行特征选择。


习题3:
在这里插入图片描述


10.4 Random Forest in Action

通过一个简单的二分类例子说明随机森林的算法流程,如下图所示:
在这里插入图片描述
random combination的意思是说在对输入空间进行划分时,不只是用一个假设函数 gg 进行切分,而是使用随机组合的几个假设函数进行切分,这种切分方式就不是简单的水平或竖直切分了,而是一些稍显复杂的边界。第二幅图中,使用拔靴法的Bagging算法那每次只使用一半的样本进行划分,其中圈出的蓝点和红叉叉是被选中的样本点,其它缩小的红蓝点是未被选中的点。因为样本比较少,可以看出,分类边界会犯一些错误。将这些 gtg_t 进行融合得到的 GG ,随着划分次数的增多,分割边界会越来越平滑。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
同时,随机森林还做出了类似最大边界(large-margin)的效果。看一下更复杂的情况:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由上图可以看出RF算法分分类边界更平滑。那么对于含有噪声数据的输入呢?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看出RF算法随着树的增多,其对噪声数据的容忍能力提高,可以极大的缓解过拟合,得到比较稳定的结果。那么,RF需要多少棵树呢?
在这里插入图片描述
通常的判断标准是看 GG 的表现是否稳定来决定是否增减树的数量。


习题4:
在这里插入图片描述


Summary

本节课介绍了随机森林(RF)算法,其原理很简单,先用决策树得到不同的假设函数,然后再做Bagging。为了增加决策树的随机性,通常做法是对特征输入空间做随机映射,即随机选择特征。在这个模型中,因为做了Bagging,所以可以使用OOB样本代替验证集的样本,这样可以避免重复训练,降低算法复杂度。通常还使用Permutation test 来辅助选择特征。经过以上处理,在有足够多棵树的前提下,随机森林算法的分类边界变得很平滑,并且高效可靠。
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章