天天看点

boosting算法_boosting

boosting算法_boosting

网上有很多讲解机器学习中关于boosting算法的一些文章,讲解的都很清晰,我就不搬砖 了。那本文主要是总结boosting算法的一些思想以及这些算法的一些区别,有哪些地方没有讲到,欢迎在评论区添加。

我们知道常用的boosting算法有Adaboost(adaptive boost),GDBT(Gradient Boost Decision Tree)和xgboost(eXtreme Gradient Boosting),他们都属于集成学习中的boosting分支,集成学习中的另外一个分支是bagging。boosting和bagging的区别呢,就是boosting 每一个基模型的输入是上一个基模型的输出,就是说其基模型是有序的,而bagging无序;还有一点就是boosting训练的的每一个基模型会更加关注方差(因为其本身优化的目标就是增加模型的拟合能力,所以会使用深度不是很深的决策树,比如Ababoost使用树桩),而bagging 更加注重偏差(因为其使用多个决策树本身就是为了减小方差,所以会使用深度较深的决策树)。

下面将主要说一下这三个算法的特点:

Adaboost

适用于分类,其每次训练一个基模型的时候会用上一个基模型对训练数据做预测,并根据预测的结果对样本的权重进行更新,主要是增加错误样本的权重。这种动态调整样本权重的方式,使得下一个基模型能够更加关注错误样本。

GDBT

适用于回归和分类。其会根据上一个基模型的计算真实值与预测值之间的差值(残差),并把这个作为下一个基模型的输入,希望下一个基模型能够更加减小残差,这样子模型的拟合能力就会提高。

xgboost

适用于回归和分类。其主要是定义了优化目标函数,并通过添加正则项来限制模型的复杂度;并巧妙地使用了泰勒公式把目标函数进行了二阶展开,其中关于损失函数对每一个样本的一阶和二阶导数只跟上一个基模型的预测值有关,这样子优化的目标函数就只跟当前基模型有关。如果说基模型(决策树)的结构是已知的,那么就可以通过求导来计算每一个样本的的预测值,问题是基模型的结构不知道,那么可以根据目标函数采用贪心的思想来构建一棵树,再根据构建的树求出每一个样本的预测值,最后将这些基模型相加。

本人也只写过Adaboost,下面两个没有写过,有什么不对的地方欢迎指定。

参考链接

谋杀电视机:机器学习-一文理解GBDT的原理-20171001

杜博亚:Adaboost、GBDT与XGBoost的区别

GBDT:梯度提升决策树