本次博客将详解机器学习中集成式学习方法。
集成学习
首先,我们得明白什么是集成式学习。
集成学习(ensemble learning)是通过构建并结合多个机器学习器来完成学习任务。集成学习可以用于分类问题集成,回归问题集成,特征选取集成,异常点检测集成等等。
集成学习的思想就是通过训练多个弱学习器,然后通过“三个臭皮匠赛过诸葛亮”的思想,把这些弱分类器结合成一个强分类器。如下图所示:
从图中可以看出,集成学习有两个重点:
第一个是如何训练得到若干个弱学习器
另一个是如何选择一种结合策略,将这些弱学习器集合成一个强学习器。
集成学习得到若干个弱学习器有两种思路:
同质集成,即由多个同种类型的个体学习器集成,如“决策树集成”等,此时,个体学习器称为“基学习器”;
异质集成,即由多个不同的学习算法集成。
集成学习通过将多个学习器进行结合,通常可获得比单一学习器显著优越的泛化性能。
目前来说,同质个体学习器的应用是最广泛的,一般我们常说的集成学习的方法都是指的同质个体学习器。而同质个体学习器使用最多的模型是CART决策树和神经网络。
根据个体学习器的生成方式,目前的集成学习方法按照个体学习器之间是否存在依赖关系可以分为两类:
第一个是个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是boosting系列算法;
第二个是个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是bagging和随机森林(Random Forest)系列算法。
Boosting
Boosting是一族可将弱学习器提升为强学习器的算法。Boosting思想大致为:对一份数据,建立M个模型(比如分类),一般这种模型比较简单,称为弱分类器(weak learner)。每次分类都将上一次分错的数据权重提高一点再进行分类,这样最终得到的分类器在测试数据与训练数据上都可以得到比较好的成绩。
Boosting可以用下面的公式来表示:
训练集中一共有n个点,我们可以为里面的每一个点赋上一个权重Wi(0 <= i < n),表示这个点的重要程度,通过依次训练模型的过程,我们对点的权重进行修正,如果分类正确了,权重降低,如果分类错了,则权重提高,初始的时候,权重都是一样的。上图中绿色的线就是表示依次训练模型,可以想象得到,程序越往后执行,训练出的模型就越会在意那些容易分错(权重高)的点。当全部的程序执行完后,会得到M个模型,分别对应上图的y1(x)…yM(x),通过加权的方式组合成一个最终的模型YM(x)。
Boosting系列算法里最著名算法主要有AdaBoost算法和提升树(boosting tree)系列算法。提升树系列算法里面应用最广泛的是梯度提升树(Gradient Boosting Tree)。
Bagging
Bagging的算法原理和 boosting不同,它的弱学习器之间没有依赖关系,可以并行生成。如下图所示:
从上图中可以看出,首先,我们根据自助采样法(Bootstap sampling)对数据进行采样,即,有放回的重复采样m个训练样本。然后基于每个训练样本训练出一个基学习器,再将这些基学习器进行结合。
随机森林是bagging的一个特化进阶版,即,RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。具体来说,传统决策树在选择划分属性时是在当前结点的属性集合(假设有d个属性)中选择一个最优属性;而在RF中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。一般推荐 k=log2d 。
结合策略
现在就来讲讲都有哪些常用的结合策略,我们假定我得到的T个弱学习器是 h1,h2,..,hT 。
平均法
对于数值类的回归预测问题,通常使用的结合策略是平均法,也就是说,对于若干和弱学习器的输出进行平均得到最终的预测输出。
如果每个个体学习器有一个权重w,则最终预测是
H(x)=∑i=1Twihi(x)
其中 wi 是个体学习器 hi 的权重,通常有
wi≥0,∑i=1Twi=1
投票法
对于分类预测问题,我们通常使用的是投票法。假设我们的预测类别是 {c1,c2,...cK} ,对于任意一个预测样本x,我们的T个弱学习器的预测结果分别是 (h1(x),h2(x)...hT(x)) 。
最简单的投票法是相对多数投票法,也就是我们常说的少数服从多数,也就是T个弱学习器的对样本x的预测结果中,数量最多的类别 ci 为最终的分类类别。如果不止一个类别获得最高票,则随机选择一个做最终类别。
稍微复杂的投票法是绝对多数投票法,也就是我们常说的要票过半数。在相对多数投票法的基础上,不光要求获得最高票,还要求票过半数。否则会拒绝预测。
更加复杂的是加权投票法,和加权平均法一样,每个弱学习器的分类票数要乘以一个权重,最终将各个类别的加权票数求和,最大的值对应的类别为最终类别。
学习法
当训练数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来进行结合。对于学习法,代表方法是stacking,当使用stacking的结合策略时, 我们不是对弱学习器的结果做简单的逻辑处理,而是再加上一层学习器,也就是说,我们将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。
在这种情况下,我们将弱学习器称为初级学习器,将用于结合的学习器称为次级学习器。对于测试集,我们首先用初级学习器预测一次,得到次级学习器的输入样本,再用次级学习器预测一次,得到最终的预测结果。
后面,我将对分别对Adaboost与GBDT,bagging与随机森林的算法原理都做出总结,敬请期待!!
参考文献
【1】http://www.cnblogs.com/pinard/p/6131423.html
【2】周志华《机器学习》