提升法 Boosting
将一系列假想以不同权重结合
通过降低偏差减小预测误差
Boosting的提出与发展离不开Valiant和 Kearns的努力,历史上正是Valiant和 Kearns提出了"强可学习"和"弱可学习"的概念。那什么是"强可学习"和"弱可学习"呢?在概率近似正确PAC学习的框架下:
- 弱学习:识别错误率小于1/2(即准确率仅比随机猜测略高的学习算法)
- 强学习:识别准确率很高并能在多项式时间内完成的学习算法
非常有趣的是,在PAC 学习的框架下,强可学习和弱可学习是等价的,也就是说一个概念是强可学习的充分必要条件是这个概念是弱可学习的。
弱可学习算法比强可学习算法容易得多。提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称为基本分类器),然后通过一定的形式去组合这些弱分类器构成一个强分类器。
大多数的Boosting方法都是通过改变训练数据集的概率分布(训练数据不同样本的权值),针对不同概率分布的数据调用弱分类算法学习一系列的弱分类器。
下面介绍一种常用的Boosting方法: Adaptive Boosting 即 Adaboost [Adaboost算法原理]ttps://zhuanlan.zhihu.com/p/41536315
先训练出多个弱可学习模型,加大分类错误率低的弱分类器的权重,因为这些分类器能更好地完成分类任务,而减小分类错误率较大的弱分类器的权重,使其在表决中起较小的作用。
优点:
(1)Adaboost提供一种框架,在框架内可以使用各种方法构建子分类器。可以使用简单的弱分类器,不用对特征进行筛选,也不存在过拟合的现象。
(2)Adaboost算法不需要弱分类器的先验知识,最后得到的强分类器的分类精度依赖于所有弱分类器。无论是应用于人造数据还是真实数据,Adaboost都能显著的提高学习精度。
(3)Adaboost算法不需要预先知道弱分类器的错误率上限,且最后得到的强分类器的分类精度依赖于所有弱分类器的分类精度,可以深挖分类器的能力。Adaboost可以根据弱分类器的反馈,自适应地调整假定的错误率,执行的效率高。
(4)Adaboost对同一个训练样本集训练不同的弱分类器,按照一定的方法把这些弱分类器集合起来,构造一个分类能力很强的强分类器,即“三个臭皮匠赛过一个诸葛亮”。
缺点:
在Adaboost训练过程中,Adaboost会使得难于分类样本的权值呈指数增长,训练将会过于偏向这类困难的样本,导致Adaboost算法易受噪声干扰。此外,Adaboost依赖于弱分类器,而弱分类器的训练时间往往很长。
关于提升法和装袋法:
从训练时间上来看
装袋法的各个假想可以并行生成,因此可以并行训练节省大量时间开销,提升法的各个假想只能按顺序生成,对于像神经网络这样的模型,训练时间会非常长。
从偏差和方差上来看
装袋法的均匀结合的一大特点就是可以降低方差,因此该方法下的一系列假想可以是高方差低偏差 (复杂度高),比如没有修剪的决策树
提升法那个例子里面的小朋友每个都弱弱的,每个人给出的答案里正确答案都差很远但是互相差别不远 (高偏差低方差),因此该方法下的一系列假想可以是高偏差低方差 (复杂度低),比如没有决策树桩
前向分布算法
抽象出Adaboost算法的整体框架逻辑,构建集成学习的一个非常重要的框架----前向分步算法,有了这个框架,我们不仅可以解决分类问题,也可以解决回归问题。
加法模型:从前向后,每一步只优化一个基函数及其系数,逐步逼近目标函数,那么就可以降低优化的复杂度。
Adaboost算法是前向分步算法的特例,Adaboost算法是由基本分类器组成的加法模型,损失函数为指数损失函数。
梯度提升决策树 GBDT
-
基于残差学习的提升树算法
在回归问题中,没有上述提到的预测正误的问题,于是用 残差 y i − y i ^ y_{i} - \hat{y_{i}} yi−yi^ 来代替分类错误率评价模型优劣。
平方损失求导(求负梯度)即为残差 -
梯度提升决策树 GBDT
对损失函数求梯度作为评价标准 优化模型
一类算法
- XGBoost
- LightGBM