boosting 3大算法总结

boosting 3大算法总结

以前的两篇文章 adaboost 原理boosting原理 写完后,感受仍是没有特别弄明白boost,全部就有了本文。算法

集成学习

首先咱们须要知道什么是集成学习? 集成学习是经过训练弱干个弱学习器,并经过必定的结合策略,从而造成一个强学习器。dom

整个过程有两个难点:机器学习

  • 如何获得若干个个体学习器
  • 如何选择一种结合策略

先来看第一个问题如何获取个体学习器,在选择上有两个:函数

  1. 同质学习器,例如随机森林都使用cart树
  2. 异质学习器,例如使用不一样的分类器,最终采起投票的方式

其中用的比较多的是同质学习器。同质学习器按照个体学习器之间是否存在依赖关系能够分为两类:学习

  • 第一个是个体学习器之间存在强依赖关系,一系列个体学习器基本都须要串行生成,表明算法是boosting系列算法;
  • 第二个是个体学习器之间不存在强依赖关系,一系列个体学习器能够并行生成,表明算法是bagging和随机森林(Random Forest)系列算法。

本文重点讲boosting算法。3d

boosting基本原理

关于boosting算法,咱们须要知道其中最有名的3个算法:rest

  • Adaboost(Adaptive Boosting)
  • GBM(Gradient Boosting Machine)
  • XGBoost

GBM

咱们先来看 GBM ,其思路是逐步提高,怎么理解呢?cdn

咱们先看来梯度提高算法:首先给定一个损失函数 L(y,F(x)),其输入是训练对:(x1,y1),(x2,y2),...,(xn,yn),目标是找到最优的F(x),使得损失函数L最小,按照传统梯度降低的方法,咱们会将训练数据(xi,yi)带入,而后求L对参数的偏导,再用负梯度进行参数更新: blog

这么作的一个前提是咱们须要保证损失函数Loss对F可微,F对参数 \theta 可微,第二个可微能够说比较困难,因而咱们直接在函数空间F中对F进行求解,咱们假设f是一系列数值叠加而来:
其中每一个 \theta\phi 经过下面求极小值获取:

针对上面 \theta\phi 的求取上,有两种成熟的方法:ci

  • Gradient Descent
  • Newton’s Method

也就分别对应了 GBM 和 XGBoost,先来说 GBM。

咱们对 \theta\phi 极小值的求取上,在 fm上采起一阶泰勒展开,此时求倒数获得:

那根据一阶泰勒,此时求loss的极小值,至关让f沿着负梯度的方向走,则必然随着f的迭代,loss是减少的,如今咱们来总结下问题:

咱们将已知输入数据从 (xi,yi) 转变到了 (xi,-gm(xi)),咱们如今要用函数 \phi_m 去拟合 (xi,-gm(xi)),而且评判标准以下:

当咱们学习到了\phi_m,咱们再去看最佳步长应该是多少:

总结下整个过程:

有了上面这个过程后,咱们还有一步须要确认的是怎么求最优的 \phi_m ,如今咱们假设 \phi_m 是树模型,此时咱们须要学习 树的结构以及每一个叶子节点的权重。

先来学习树结构.

咱们假设树能够分为T个节点,而且每一个节点权重为wj,则:

其中 n_jm 是在第j个叶子数据点的个数,针对上面的式子,咱们定义 G_jm 为第j个叶子节点中全部数据的梯度和,而且将常数项gm去除,咱们获得:

所以若是树的结构固定,咱们能够获得全部的叶子权重为:
咱们将其带回入loss函数,能够获得:
下面咱们来决定一个叶子节点是否应该继续分裂,咱们能够计算分裂后的loss变化:
若是gain>0则分裂,不然则为叶子节点。

如今当咱们学习到真正的树结构后,咱们再去从新学习最优的树权重:

wjm是第j个叶子节点的权重,如今整个算法的流程以下:

Adaboost

咱们在Adaboost原理一文中给出了算法流程:

咱们能够从下面4个问题来理解Adaboost算法:

  • 1)如何计算学习偏差率e?
  • 2 ) 如何获得弱学习器权重系数α?
  • 3)如何更新样本权重D?
  • 4 ) 使用何种结合策略?

第一个问题:学习偏差率e的计算,第m个弱分类器的偏差率为训练集上的加权错误率:

此处分母其实为1,能够省略。 第二个问题:弱分类器权重。
为何这样计算弱学习器权重系数?从上式能够看出,若是分类偏差率ek越大,则对应的弱分类器权重系数αm越小。也就是说,偏差率小的弱分类器权重系数越大。 第三个问题:如何进行权重更新
对于分类正确的,权重下降,对于分类错误的,权重增长 第四个问题:集合策略。Adaboost分类采用的是加权平均法,最终的强分类器为

提高方法

以上内容是咱们在文章 Adaboost 原理中讲的,咱们本文来看看其实怎么符合上文GBM原理的.GBM的算法原理以下:

Adaboost中loss为指数损失:
此时第m轮迭代,咱们要求:
接下去是重点了,咱们此处如何求最佳的 \alpha_m , G_m,由于loss函数是指数损失,我么很容易的经过化解、求导直接获得最佳的 \alpha_m , G_m,下面是具体的推导:
因而咱们求最佳的G_m即为:
接着咱们对 \alpha_m 进行求导,获得:

XGBOOST

XGBOOST但愿直接求解下面的式子从而获得最优的fm

咱们能够在fm-1处进行二阶泰勒展开,获得:
进一步化解获得:
咱们让G_jm和H_jm分别表示在Region j中的和,因而有:
此时咱们对wjm求导,就能获得最佳的wjm:
代回loss中:
此时根据loss,我么就能够学习到树的结构:
整个算法描述以下:
在xgboost中,还加入了正则项来防止过拟合:
其中γ是对叶节点的惩罚,α 和 λ 分别是L1和L2正则,此时最优的wjm为:
此时计算增益公式为:

总结

本文介绍了boosting算法中最著名的3个算法

  • Adaboost(Adaptive Boosting)
  • GBM(Gradient Boosting Machine)
  • XGBoost

而且介绍了Adaboost是GMB中损失函数为指数损失的特例,后续还会有两篇文章,一篇介绍adaboost 算法的变种,另外一篇结合代码来介绍3个算法。

你的鼓励是我继续写下去的动力,期待咱们共同进步。

这个时代,每一个人都是超级个体!关注我,一块儿成长!

参考

Tree Boosting With XGBoost: Why Does XGBoost Win “Every” Machine Learning Competition?

Gradient Boosting from scratch

Boosting algorithm: XGBoost

机器学习(23)之GBDT详解

Gradient Boosting from scratch

相关文章
相关标签/搜索