AdaBoost、提升树 、Boosting、RF随机森林

集成化处理

  1. 集成学习架构图
    AdaBoost、提升树 、Boosting、RF随机森林在统计学习中,集成学习(ensemble learning)是将多个基学习器(base learners)进行集成,以得到比每个单独基学习器更优预测性能的方法。每个用于集成的基学习器都是弱学习器(weak learner),其性能可以只比随机猜测稍微好一点点。集成学习的作用就是将这多个弱学习器提升成一个强学习器(strong learner),达到任意小的错误率。

  2. Boosting
    在设计算法之前,集成学习先要解决的一个理论问题是集成方法到底有没有提升的效果。在计算学习的理论中,这个问题可以解释成弱可学习问题(weakly learnable)和强可学习问题(strongly learnable)的复杂性是否等价。幸运的是,这个问题的答案是“是”,而实现从弱到强的手段就是提升方法( Boosting)。

通俗来说,提升方法就是三个臭皮匠顶个诸葛亮组合:例如孔明要选择三位将领,第一位擅用步兵和骑兵,但对水战一窍不通,这样的将领用来对付曹操可以,对付孙权就有点儿吃亏了。为了补上第一位将军的短板,第二位裨将在选择时专门挑选了水战功力雄厚的,可惜这位水军高手也有不足,骑马还可以,指挥步兵就是去送人头。这两位参谋放在一起,指挥骑兵一点儿问题都没有,但另外两个军种就差点儿意思。

为了查缺补漏,诸葛丞相在第三位裨将的选择上颇费了一番心思,找到了一位步战和水战兼通的将军。这样一来,这三位裨将组成的联席会议就能游刃有余地指挥各种战斗:无论在哪种战法上,专业的将领都能够占到了总体中的多数。虽然每一位将领单独拎出来都有严重的缺陷,可三个组合在一起就能让战斗力大大地提升。

  1. 提升方法示意图
    AdaBoost、提升树 、Boosting、RF随机森林上面的解释意在说明**提升方法(boosting)通过改变训练数据的分布来训练不同的弱学习器,再将它们组合成强学习器。**虽然不受具体训练方法的限制,但大多数提升算法都会迭代生成与数据分布相关的弱分类器,并将它们以加权组合的方式添加到最终的强分类器中。每当一个新的弱学习器加入后,数据的权重都会被重新分配(reweighting),被错误分类的样本占据更大的权重,被正确分类样本的权重则被相应地削减,这保证了未来的弱学习器会更多地以前车之覆作为后车之鉴。

**自适应提升(adaptive boosting, AdaBoost)**是最成功的提升算法。它的自适应在于:前一个基本分类器被错误分类的样本的权值会增大,而正确分类的样本的权值会减小,并再次用来训练下一个基本分类器。同时,在每一轮迭代中,加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数才确定最终的强分类器。

提升树

以决策树为基函数的提升方法称为提升树模型。提升树模型可以表示为决策树的加法模型:
AdaBoost、提升树 、Boosting、RF随机森林

AdaBoost、提升树 、Boosting、RF随机森林

RF随机森林

以决策树作为基学习器,使用梯度提升方法进行集成,得到的就是梯度提升决策树(gradient boosting decision tree, GBDT)。在每一轮的提升过程中,GBDT 都会使用决策树来拟合计算出负梯度,因此整个模型就是一大堆决策树的组合。

在解决分类问题时,GBDT 中的负梯度可以表示成样本归属于每个类别的真实概率和上一轮预测概率的差值,这个差值会被回归树拟合,拟合值与上一轮预测概率求和就是这一轮的输出。

GBDT 是利用提升方法生成的全能模型,它在装袋方法上的对应是随机森林。

随机森林(ramdom forest)由若干个随机树(random tree)模型组成,每一棵单独的随机树都采用自助采样作为数据重采样的手段,但只会随机选择少量的特征用于生成树结构,这样生成的随机树也无需进行剪枝的处理。

这个算法其实是两种随机化方法——属性随机化和数据随机化的组合。

属性随机化的思想也叫随机子空间方法(random subspace method),由香港学者 Ho Tin-Kam 首先提出。

属性随机化的好处在于让每个单独的基学习器不会过分关注在训练集中具有高度预测性或者描述性的特征,这样的特征虽然在训练数据中举足轻重,却将对数据的解释限制在狭窄的范围之内,未必能对测试数据进行精确预测。而随机抽取出的不同属性构成了不同的随机子空间,应用不同的随机子空间去训练不同的单个决策树。其实就是集成学习中非常重要的多样性思想(diversity)的体现。

归根结底,属性随机化的作用还是在于机器学习中老生常谈的问题,那就是提升泛化性能,抑制过拟合。

数据随机化是由从统计学半路出家的莱奥·布雷曼(之前的文章中也提到过这位老先生)提出,他在此基础上进一步发展出了我们今天所熟知的随机森林模型。

数据随机化最主要的作用在于去除各独立模型之间的相关性,这个装袋方法的思想一脉相承。单棵决策树会对它自己的训练集中潜在的噪声高度敏感,但只要不同的树之间有较好的独立性,这种敏感特性就不会扩散到整个森林里。

此外,数据随机化的作用还体现在包外样本上。对于装袋法这种有放回的采样来说,大概会有三分之一的数据在训练过程中不会被用到,这部分未利用的数据就是包外样本(out-of-bag sample)。包外样本实际上起到了验证集的作用,可以证明,在包外样本计算出来的错误率是真实错误率的无偏估计,这就给算法的评估提供了一个比较靠谱的参考。