1. Boosting
提升方法通过改变训练样本权重,学习多个分类器,并将分类器线性组合提高分类性能。Boosting需要做到两件事,一是在每一轮如何改变训练数据的权值或概率分布;二是如何将弱分类器组合成一个强分类器。
2. AdaBoost
为了解决Boosting的两个要求,adaboost在每一轮提高被错分的样本的权值,降低正确分类样本的权值。在组合分类器的时候,给误分率小的分类器较大权值,误分率大的分类器较小权值。一句话概括adaboost就是用样本权值计算分类器的权值,再用分类器的权值去更新样本的权值。
AdaBoost的过程如下:
输入:训练数据集T ={(x1, y1), (x2, y2), ..., (xN, yN)},其中xi∈X⊆Rn,yi∈Y={-1, +1};
输出:最终分类器G(x)
1. 初始化训练数据的权值分布
2. 在每一轮训练中,设当前训练到第m轮
(a) 使用带权训练数据学习,得到该轮的基本分类器 G_m(x):X->(-1,1)
(b) 计算当前分类器的误分类率
(c) 计算当前分类器G_m的权值
(d) 更新样本的权值
观察上式,Z_m是的归一化因子,e是自然对数,e的指数其实就是的正负项,可以验证当分类正确的时候指数是负的,当分类错误的时候指数是正的,这样就有对误分的样本增大权值,对分类正确的样本减小权值的效果。
3. 最终分类器是每轮分类器的加权线性组合
adaboost的本质
adaboost是模型为加法模型,损失函数为指数函数,学习算法为前向分步算法时的二类分类学习方法。
解释:http://breezedeus.github.io/2015/07/12/breezedeus-adaboost-exponential-loss.html
3. GBDT
梯度提升树(Gradient Boosting Decison Tree),和adaboost一样也是迭代模型,使用了前向分布算法,但是弱学习器限定了只能使用CART回归树模型。在迭代的过程中,当前的分类器目标是拟合前一轮分类器的残差。下面是一个预测年龄的例子,我们限定树只能有两层,第一轮预测了15和25(预测值是子节点样本的均值),第二轮预测的是第一轮的残差。最后的预测结果是所有树预测的和。
GBDT过程:
1. 初始化分类器
2. 对迭代1,2....T轮:
(a) 样本1,2,...m,计算负梯度。注意负梯度是t-1轮模型的负梯度,我们用t-1的负梯度来生成第t轮的树
之所以是计算负梯度,和损失函数有关,GBDT常用的损失函数有均方差、绝对损失等,以均方差损失函数为例
梯度是,负梯度正好是预测的残差,所以说GBDT拟合残差就是在拟合负梯度
(b) 利用拟合CART回归树,得到第t轮的回归树T
(c) 更新模型
(d) 输出模型
GBDT分类
由于GBDT使用的是cart回归树,而分类的标签是离散的标签,所以实现方法和回归不同。分类的GBDT常用损失函数有指数函数和对数损失。当用指数损失函数的时候,GBDT退化为adaboost
当用对数释然函数的时候,用预测概率和真实概率的差来拟合损失
参考
https://zhuanlan.zhihu.com/p/31639299
https://blog.csdn.net/herr_kun/article/details/81139457
https://www.jianshu.com/p/005a4e6ac775 参数设置
https://www.zhihu.com/question/63560633
https://zhuanlan.zhihu.com/p/25257856