写点什么

实用机器学习笔记二十二:集成学习之 Boosting

作者:打工人!
  • 2022 年 3 月 06 日
  • 本文字数:1100 字

    阅读完需:约 4 分钟

实用机器学习笔记二十二:集成学习之Boosting

前言:

本文是个人在 B 站自学李沐老师的实用机器学习课程【斯坦福 2021 秋季中文同步】的学习笔记,感觉沐神讲解的非常棒 yyds。

Boosting:


  • 什么是 Boosting 以及它的核心思想:把多个弱模型(偏差比较大的模型)组合成一个强壮的模型。

  • 主要目的:减小偏差。


  • 实现步骤:顺序地学习弱模型。在时间步

  • 训练一个弱模型,然后评估它的误差

  • 把那些被错误预测的样本拿出来,并根据误差,针对被预测错误的样本从新训练一个模型


  • 具体算法:AdaBoost, gradient boosting

Gradient Boosting:


  • 表示在步的模型,可以认为=0

  • 在第一步时,即

  • 针对残差: , 训练一个新的模型。假设是个回归任务,帮助我们理解:从新训练一个模型,对上一步 boosting 没有拟合好的那部分数据做拟合(实际上是对残差做拟合)。只有在时,是对原始数据集进行训练,其他的时候都是对上一步 boosting 模型的输出与真实值之间的差值训练新的模型


  • 学习率的作用:通过收缩的方式正则化这个模型,防止过拟合。因为:模型是对残差进行拟合,如果拟合的太好,直接加上的话,反复 boosting 几次,很容易出现过拟合(对数据学习的很好),因此通过学习率,一点一点的加上,不那么信任,防止过拟合。

Gradient Boosting 代码:

class GradientBoosting:  def _init_(self,base_learner,n_learners,learning_rate):    self.learners = [clone(base_learner) for _ in range(n_learners)]    self.lr = learning_rate      def fit(self, X,y):    residual = y.copy()    for learner in self.learners:      learner.fit(X, residual)      residual -= self.lr*learner.predict(X)        def predict(self, X):    preds = [learner.predict(X) for learner in self.learners]    return bp.array(preds).sum(axis = 0)*self.lr
复制代码

Gradient Boosting Decision Trees(GBDT):


  • 这里使用决策树作为弱模型来举例说明:

  • 决策树本身并不是弱模型,它实际上是一个很强的模型,如果树的层数够深的化,可以很好的拟合数据

  • 如何构建弱决策树模型?把树的深度设置的小一点,比如 3。或者随机采样特征,并不把所有的特征都拟合。


  • 顺序构建决策树来做 boosting。如果数据集很大,构建决策树运行会很慢。目前有一些加速算法:XGBoost,lightGBM 等


  • GBDT 性能如下:

  • 从图中可以看出,并没有出现过拟合,因为设置决策树的时候,把决策树设置成了弱模型。这也是 Boosting 的优点:防止过拟合


GBDT

总结:


  • Boosting 把 n 个弱模型组合在一起构成强模型,以此降低偏差


  • Gradient Boosting 是使用弱模型去拟合标号上的残差


发布于: 刚刚阅读数: 3
用户头像

打工人!

关注

未来自动驾驶领域扫地僧 2019.11.10 加入

2021年InfoQ年度最佳内容获得者。 InfoQ签约作者 自动化和控制专业入坑人士,目前在研究深度强化学习(DRL)技术。学了Java,本来要入坑互联网,现在要入坑车联网了。喜欢了解科技前沿技术,喜欢手机摄影。

评论

发布
暂无评论
实用机器学习笔记二十二:集成学习之Boosting_深度学习_打工人!_InfoQ写作平台