机器学习算法(六):随机森林

随机森林算法

在之前的博客中我们已经介绍过了集成方法中的一大类Boosting方法,这里我们就来介绍另一类的Bagging方法,以及其的一个著名实例随机森领算法。

Bagging算法

Boosting算法使得不同的基学习器具有较大差异的做法是改变训练数据的权重。另一种做法是对训练数据进行采样,产生出若干不同的子集,再从每一个训练子集中训练出一个基学习器。这样,由于训练数据的不同,获得的基学习器可望具有较大的差异。然而,为了获得好的集成,我们同时还希望个体学习器不能太差,如果采样出的每个子集都完全不同,则每个基学习器只用到了一小部分训练数据,这样显然无法确保产生出比较好的基学习器。

为了解决这个问题,我们可以考虑使用相互有交叠的采样子集。可以使用bootstrap采样方法(这在我的博客中有介绍),这是一种有放回的采样方法,初始训练集中约有63.2%的样本出现在采样子集中。

照这样,我们可以采样出T个含m个样本的训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合。这就是Bagging的基本流程。在对预测输出进行结合时,Bagging通常对分类任务使用简单投票算法(这个我们稍后会介绍),对分类任务使用简单平均法。

由于T个基学习器互相不关联,因此可以同时学习。考虑到投票/平均过程的复杂度很小,而T通常是一个不太大的常数。因此,训练一个Bagging集成与直接使用基学习算法训练一个学习算法的复杂度同阶。这说明Bagging是一个很高效的集成学习算法。

与标准AdaBoost只适用与二分类任务不同,Bagging能不经修改地用于多分类、回归任务中。

Bagging主要关注降低方差,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更为明显。

随机森林算法

随机森林是在以决策树为基学习器构建集成的基础之上,进一步在训练的过程中加入了随机属性选择。

对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后从这个属性子集中选择一个最优属性进行分类。这里的k值控制了随机性的引入程度,推荐值是 k=log2d ,其中d是属性集合的大小。

虽然随机森林算法简单,但它的效果取足以与SVM这种非常复杂的算法相媲美。可以看出,随机森林只是在Bagging的框架上做出了小改动,但是与Bagging中基学习器的『多样性』仅通过样本扰动而来不同,随机森林中基学习器的多样性还来自属性扰动。而且在训练效率上也优于Bagging,因为在选择最优划分属性时只考虑了部分属性。

结合策略

在集成方法中,如何将基学习器的输出结合起来得到集成的输出,就是这一节需要讨论的问题。

平均法

这是针对数值型输出而言的。

简单平均法:

H(x)=1Ti=1Thi(x)

加权平均:

H(x)=i=1Twihi(x)

加权平均法的权重一般是从训练数据中学习而得的(这里并没有说明如何学习到这个权重),现实任务中的训练数据通常不充分或存在噪声,这将使得学出的权重不完全可靠。尤其是对规模比较大的集成来说,要学习的权重比较多,较容易导致过拟合。因此,加权平均未必一定优于简单平均。一般而言,在个体学习器性能相差较大时宜使用加权平均,而在个体学习器性能相近时宜使用简单平均。

投票法

对分类任务来说,学习器 hi 将从类别标记集合 {c1,c2,...,cN} 中预测出一个标记。将 hi 在样本x上的预测输出表示为一个N维向量 (h1i(x);h2i(x);...;hNi(x)) ,其中 hji(x) hi 在类别 cj 上的输出。

不同类型的个体学习器能产生不同类型的 hji(x) 值,常见的有:

  1. 类标记: hji(x){0,1} ,也称为『硬投票』。
  2. 类概率: hji(x)[0,1] ,相当于对后验概率 P(cj|x) 的一个估计。亦称『硬投票』。

不同类型的 hji(x) 值不能混用。对一些能在预测出类别的同时产生分类置信度的学习器,其分类置信度能转化为概率使用。若此类值未进行规范化,则必须啊使用一些缩放技术进行『校准』后才能作为类概率使用。

绝对多数投票法:

H(x)=cj,ifi=1Thji(x)>0.5k=1Ni=1Thki(x)reject,otherwise

若某标记的票超过半数,则预测为该标记,否则拒绝预测。这在可靠性要求较高的学习任务中是一个很好的机制。但若学习任务必须提供预测结果,则绝对多数投票法将退化为相对多数投票法。

相对多数投票法:

H(x)=cargmaxjTi=1hji(x)

若同时有多个标记获最高票,则从中随机选取一个。

加权投票法:

H(x)=cargmaxjTi=1wihji(x)

这个方法与加权平均法类似。

虽然分类器估计出的类概率值一般不准确,但基于类概率进行结合往往比直接基于类标签进行结合性能更好。若基学习器的类型不同,则其类概率值不能直接进行比较。在这种情况下,通常可以将类概率转化为类输出,然后再投票。

写在最后

本篇博客的主要内容来自《机器学习》(周志华)。

你可能感兴趣的:(机器学习算法,机器学习,Adaboost,回归树)