当我们在谈论GBDT:其他 Ensemble Learning 算法

本系列意在长期连载分享,内容上可能也会有所增删改减;

因此如果转载,请务必保留源地址,非常感谢!

知乎专栏:当我们在谈论数据挖掘

引言

在上一部分中,我们介绍了 Boosting 类算法,这是 Ensemble Learning 中常用的一类算法,每个迭代学习一个弱算法来降低损失,并将这些算法线性组合成强算法。还有另外一种 Ensemble Learning 算法 Bagging,通过学习出若干个不相关的弱算法,并将它们组合成强算法。这一部分我们主要介绍 Bagging,以及它的扩展形式 Random Forest。

Bagging

Bagging 是 Bootstrap Aggregating 的缩写,如它的名字所示,它也包含两个步骤,即 Bootstrap Sampling 和 Aggregating。

Bootstrap Sampling 本质是一种有放回的采样方式,即,对于有M个训练样本的原始样本集合,我们从中有放回的抽取M个样本,作为一个 Bootstrap Sampling 样本集合。于是,在一个 Bootstrap Sampling 样本集合中,可能某个样本出现超过1次,也可能某个训练样本并没有出现过。重复进行T次 Bootstrap Sampling,则能得到T个Bootstrap Sampling 样本集合。对每个集合都能够单独训练一个弱算法,可以训练出T个弱算法。

对于Bagging,它采用的 Aggregating 方法也很简单,即投票法。如对于1个样本的分类问题,先得到T个弱算法的结果,然后对结果进行投票,票数较多的类型即最终的类型。

Bagging 的算法步骤如下

Bagging 性质

假设,对有n个训练样本的原始样本集合,我们采用 Bootstrap Sampling 的方式进行抽样n次,则每个样本被抽到的次数满足二项分布,如下,显然其中p=\frac1n

P(x=k)=C_n^kp^k(1-p)^{n-k}

n\to\infty,且p\to0时,令\lambda=np,此时每个样本被抽到的次数满足泊松分布,如下。显然,对于 Bootstrap Sampling 这个场景,\lambda=np=1

P(x=k)=e^{-\lambda}\frac{\lambda^k}{k!}

证明流程如下

因此,某个样本在整个抽取过程中,一次也没被抽到的概率P(k=0)=\frac1e。换句话说,在这次采样过程中,\frac1e的训练样本未被抽中。

这是 Bagging 一个很好的性质:天然的交叉验证集。即,我们可以利用被抽中的样本,学习出一个弱算法。然后,再利用那些未被抽中的样本来估算这个弱算法的性能。为了更好的使用这些没有抽中的样本,它们还专门被命名为 out-of-bag 样本。

因此,对于利用 Bootstrap Sampling 学习出的T个弱算法,我们将它们组合成强算法的方式如下。即,对某个样本的预测,仅使用那些 out-of-bag 样本包含此样本的弱算法

对应的,其错误率被定义为

这里还有一点需要说明,由于 Bagging 本质是利用 Bootstrap Sampling 来学习出多个弱算法,并将它们组合得到强算法。当用于训练的弱算法对训练样本不太敏感时(如k近邻),即很稳定,则每个学习出的弱算法依然很相似,组合起来的效果也难以提高。因此,应当尽量选择那种对训练样本敏感的算法作为弱算法(决策树,非线性算法)。

Rradom Forest

Rradom Forest 可以认为是 Bagging 算法的扩展形式:Bagging 通过 Bootstrap Sampling 的方式获得训练样本,训练每个弱分类器,减少弱分类器之间的相关性;而 Rradom Forest 则在此基础上,弱算法采用 CART 决策树算法,并同时在构建一课树时引入特征的随机性,进一步减少弱分类器之间的相关性。

在构建一棵树的时候,其步骤如下。需要注意的是,在构建树后并不进行剪枝操作

可以看出,这里的步骤跟原始的 CART 基本没有区别,最大的区别就在于第5步中:原始的 CART 从所有特征中选择最优的特征;Rradom Forest 则从所有特征中无放回的抽取K个特征,再从中选择最优的。对于K的选择,作者推荐可以使用log_2(N),其中N为总特征数。


最后,Rradom Forest 会将构造的树的结果合并:对于分类问题,可以使用投票法,即选择预测类别较多的一类作为结果;对于回归,可以将所有的结果求均值等。同时,由于 Rradom Forest 也使用了 Bootstrap Sampling,因此跟上面的 Bagging 一样可以利用 out-of-bag 样本更好的预测错误率。

更多的细节可以查看原始文献

尾巴

这一部分比较简短,一方面是最近比较忙碌,另一方面也是并没有太多可以讲。很多其他的 Ensemble Learning 算法也只是这几种基础算法上进行一些改动,扩展,或者用于不同的场景而已。以后有时间也可以适当进行一些补充。

本系列其他文章:

  • 当我们在谈论GBDT:从 AdaBoost 到 Gradient Boosting
  • 当我们在谈论GBDT:Gradient Boosting 用于分类与回归
  • 当我们在谈论GBDT:其他 Ensemble Learning 算法
  • 当我们在谈论GBDT:在 Kaggle 等竞赛中实践
  • 编辑于 2017-03-15

    文章被以下专栏收录