boosting_boosting算法 - CSDN
boosting 订阅
提升方法(Boosting),是一种可以用来减小监督式学习中偏差的机器学习算法。面对的问题是迈可·肯斯(Michael Kearns)提出的:一组“弱学习者”的集合能否生成一个“强学习者”?弱学习者一般是指一个分类器,它的结果只比随机分类好一点点;强学习者指分类器的结果非常接近真值。 展开全文
提升方法(Boosting),是一种可以用来减小监督式学习中偏差的机器学习算法。面对的问题是迈可·肯斯(Michael Kearns)提出的:一组“弱学习者”的集合能否生成一个“强学习者”?弱学习者一般是指一个分类器,它的结果只比随机分类好一点点;强学习者指分类器的结果非常接近真值。
信息
起    源
PAC
外文名
Boosting
作    用
提高弱分类算法准确度
中文名
提升方法
思想起源
Valiant提出的 PAC学习模型。
Boosting算法起源
Valiant和 Kearns提出了弱学习和强学习的概念 ,识别错误率小于1/2,也即准确率仅比随机猜测略高的学习算法称为弱学习算法;识别准确率很高并能在多项式时间内完成的学习算法称为强学习算法。同时 ,Valiant和 Kearns首次提出了 PAC学习模型中弱学习算法和强学习算法的等价性问题,即任意给定仅比随机猜测略好的弱学习算法 ,是否可以将其提升为强学习算法 ? 如果二者等价 ,那么只需找到一个比随机猜测略好的弱学习算法就可以将其提升为强学习算法 ,而不必寻找很难获得的强学习算法。1990年, Schapire最先构造出一种多项式级的算法 ,对该问题做了肯定的证明 ,这就是最初的 Boosting算法。一年后 ,Freund提出了一种效率更高的Boosting算法。但是,这两种算法存在共同的实践上的缺陷 ,那就是都要求事先知道弱学习算法学习正确的下限。1995年 , Freund和 schap ire改进了Boosting算法 ,提出了 AdaBoost (Adap tive Boosting)算法[ 5 ],该算法效率和 Freund于 1991年提出的 Boosting算法几乎相同 ,但不需要任何关于弱学习器的先验知识 ,因而更容易应用到实际问题当中。之后 , Freund和 schapire进一步提出了改变 Boosting投票权重的 AdaBoost . M1,AdaBoost . M2等算法 ,在机器学习领域受到了极大的关注。
收起全文
精华内容
参与话题
  • Boosting

    千次阅读 2016-08-03 23:05:53
    提升算法(Boosting)是迭代算法,它每次使用一个弱学习器弥补前一个弱学习器的“不足”,通过这样的串行增加N个弱学习器来构造一个使损失函数最小的强学习器,通过这样的迭代过程来逐步收敛到相对完善的强学习器。...

    提升算法(Boosting)是常用的有效的统计学习算法,属于迭代算法,它通过不断地使用一个弱学习器弥补前一个弱学习器的“不足”的过程,来串行地构造一个较强的学习器,这个强学习器能够使目标函数值足够小。从优化的角度分析,与一般的在参数空间搜索最优解的学习算法(如神经网络)类似,Boosting也是一个迭代搜索,且最优的算法,不同的是,它的搜索空间是学习器空间,或说函数空间(Function space),它的搜索方向是构造不断完善的强学习器,以达到目标函数(或说误差函数)足够小的目的。
    Bagging也是一种常用的统计学习方法,两者经常放在一起对比,它们不同的是,Bagging将在Bootstrap采样得到的不同训练子集上的弱学习器的结果综合考虑,各个弱学习器的构建过程是并行的。而Boosting是通过串行地不断迭加弱学习器形成一个强学习器,是学习模型的提升过程。此外,Boosting迭代在降低训练误差的同时,使模型预测的确信度(margin)不断提高,是它获得较好泛化能力的主要原因,而Bagging主要是通过平均来降低模型的方差(variation).(关于Bagging可参考我的博文Bagging
    本文首先通过一个简化的例子来说明Boosting的主要过程,然后介绍了AdaBoost——Boosting的一个成功实现,最后介绍了将梯度下降的思想引入Boosting算法,使Boosting在获得更快的收敛速度的同时,能够被扩展到更广泛的应用,这些应用往往使用更多样的目标函数。

    Toy example

    为说明Boosting的主要过程,下面举一个简化的例子。
    假设训练数据集为(x1,y1),(x2,y2),...,(xn,yn)我们的任务是寻找使这个回归问题的均方误差最小的模型F(x).
    如果已经有一个初始的模型f,且f(x1)=0.8,但y1=0.9,f(x2)=1.4,但y2=1.3 …显然f是不完美的,我们可以采用不断完善f的方式,如不断在f的基础上增加模型(如决策树)h,即:f(x)f(x)+h(x),使f 趋于F.
    我们希望:

    f(x1)+h(x1)=y1f(x2)+h(x2)=y2...f(xn)+h(xn)=yn

    即:
    h(x1)=y1f(x1)h(x2)=y2f(x2)...h(xn)=ynf(xn)

    然而恰好满足上式的h可能不存在,但我们总可以找到使残差yif(xi)变小的h.
    上述过程等价于拟合如下数据集:
    (x1,y1f(x1)),(x2,y2f(x2)),...,(xn,ynf(xn))

    上述一次叠加h的过程就是Boosting的一次迭代。要使f足够接近F一般需要多次迭代。

    AdaBoost

    是Adaptive Boost的缩写,是Boosting的一个成功的实现。本小节主要介绍了AdaBoost是如何工作的(how)、为什么是有效的(Why)以及什么情况下是适用的(When).

    How it works

    Boosting是不断使用后一个弱分类器弥补前一个弱分类器的不足的过程,在AdaBoosting中“不足”是指被前一个弱学习器误分类的点,在下一次分类中被赋予更大的权重。与其他的Boosting实现不同的是这种算法可以适应各弱分类模型各自的训练误差。

    AdaBoost算法

    这里写图片描述

    目标函数及优化方法
    数学上可以证明,AdaBoost方法不断拟合一个强学习器F(x)F(x)+αh(x)的过程其实是利用某种优化方法(如自适应牛顿法)使目标函数J(F)=E(eyF(x))最小的过程。Friedman 的证明突出了使用自适应牛顿的优化方法来使目标函数最小,而李航书中的证明从前向分步的角度。
    该指数目标函数是有效的,因为它偏向于正确分类结果,采用每次迭代使用穷举搜索来找到使目标函数最小的h。从这个角度看,AdaBoost之所以有效是因为它能使目标函数不断减小。
    指数误差函数的一个优点是其最小化将会得到最简单的AdaBoost方法,缺点是,与交叉熵误差函数相比,它对负的ty(x)的惩罚较大,对误分类的数据点的鲁棒性差。

    正则化
    通过控制迭代次数来防止过拟合。

    Why it works

    AdaBoost为什么既能获得较低的训练误差也能获得较低的测试误差?我们可以用VC维理论来解释,同时也发现一些实验结果显示AdaBoost的训练误差为零时,测试误差还能持续降低,这种现象与VC 维理论相悖,而Margin理论能很好解释这一点。
    下面左图表示理想的VC维理论下,训练误差和测试误差随Boosting迭代增加的变化趋势,右图表示一个实际的实验结果,VC 维理论成功地预测了测试误差在训练误差达到一定程度时会上升,但是不能很好解释测试误差在上升之后存在下降的现象。

    图片来自Robert ,Explaining Booting
    (图片来自Robert ,Explaining Booting)

    下面左图,测试误差在训练误差达到零并保持不变的情况下的很长的迭代过程中仍然保持减小的趋势,这是VC理论无法解释的。在Margin理论中,分类的错误率并不能完全表达分类效果的好坏,需要增加一个margin量来度量对分类结果的确信程度(confidence).margin可以表示为正、误分类概率之差,在这种表示方式下随着Boosting迭代次数的增加训练和测试数据集上的margin值都在增加,这可能是Boosting算法较好的泛化能力的来源。

    这里写图片描述
    (图片来自Robert ,Explaining Booting)

    When it works

    即使对于有噪声的训练集,AdaBoost也有很好的收敛效果,但是对于非常弱的学习器,AdaBoost的性能将变得很差。

    Gradient Boosting

    梯度提升(GB,Gradient Boosting )是一类算法,可以用于回归、分类、排序,适用于不同的误差函数,弱学习器。
    Gradient Boosting = Gradient Descent + Boosting
    Gradient Boosting 的历史:

    这里写图片描述

    对于目标函数最小化问题,我们有多种办法得到最小值点,但是在数值求解法中,负梯度提供了一个最速下降的方向来尽快收敛到最小值点(当然可能是局部最小值)。将梯度下降的办法与Boosting相结合,尽快完善前一个弱学习器的不足,便成了沿目标函数的负梯度方向前进的过程,使得学习器尽快收敛到使目标函数最小的假设F(x).

    参考文献

    Boosting
    1.Schapire R E, Freund Y, Bartlett P L, et al. Boosting the margin: a new explanation for the effectiveness of voting methods[J]. Annals of Statistics, 1998, 26(5): 1651-1686.
    2.Schapire R E, Freund Y. Boosting: Foundations and Algorithms[J]. Kybernetes, 2013.

    AdaBoost
    1.Robert E. Schapire,Explaining Booting
    2.Friedman J H, Hastie T, Tibshirani R, et al. Additive logistic regression : A statistical view of boosting[J]. Annals of Statistics, 2000, 28(2): 337-407.
    3.李航,《统计学习方法》
    4.PRML

    Gradient Boosting
    1.Friedman J H. Greedy function approximation: A gradient boosting machine.[J]. Annals of Statistics, 2001, 29(5): 1189-1232.
    2.Natekin A, Knoll A. Gradient boosting machines, a tutorial[J]. Frontiers in Neurorobotics, 2013.
    3.http://www.ccs.neu.edu/home/vip/teach/MLcourse/4_boosting/slides/gradient_boosting.pdf

    展开全文
  • 机器学习系列2:几种常见的boosting

    千次阅读 2018-07-31 23:58:08
    几种常见的boosting Boosting 很多时候单一模型不够稳定或者得出的结果不够好,需要进行模型集成(assemble),即用多种模型进行预测。集成方法分为bagging和 boosting两种。以下介绍boosting.   You can view ...

    几种常见的boosting

    • Boosting

    很多时候单一模型不够稳定或者得出的结果不够好,需要进行模型集成(assemble),即用多种模型进行预测。集成方法分为bagging和 boosting两种。以下介绍boosting.

     

    You can view Boosting as a linear regression combination of many models

     FmX=a0f0(X)+a1f1(X)+…+amfm(X)

    It is stage-wise optimized algorithm

    Learn F0, then F1 F2

     

     

    Emphases error on each iteration

    L(FmX,Y)< L(Fm-1X,Y)     L means loss function

    ADA Boost

    Emphases error by changing the distribution of samples.根据样本误差大小,分配权重。误差大的新权重大。

    Gradient Boosting

    Emphases error by changing train target.新的label是上一次预测的残差。

    • Gradient Boosting

    Basic Function:

    FX=m=0Mfm(X) 

    f(X) is the base learner, and we use decision tree in GBDT

    How to learn?

    ·Greedy way:

    ·FmX=Fm-1X+fm(X)

    ·Let L(y, FmX)<L(y, Fm-1X+fm)

      ·Gradient descent

    ·Get the negative gradient first

       ·ŷi=-ƏFm-1xil(Fm-1xi,yi)

      ·Learn from fmX to fit Ŷ by using L2 Loss

        ·fmX=arg minf(X)i=1n(fxi-ŷi)^2

    • GBDT

    GBDT=Gradient Boost + Decision Tree

    Supported Tasks: Regression, Classification, Ranking

    四、LightGBM

    LightGBM是微软2017年开源的一种基于决策树的机器学习模型。LightGBM is a gradient boosting framework. It is designed to be distributed and efficient with following advantages:

    ~Fast training speed and high efficiency

    ~Lower memory usage

    ~Better accuracy

    ~Parallel learning supported

    ~Capacity of handling large-scaling data

    ~Support categorical feature directly

     

     

    展开全文
  • 机器学习 —— Boosting算法

    万次阅读 多人点赞 2018-02-18 16:05:59
    Boosting算法(提升法) 算法的三个要素 (1)函数模型:Boosting的函数模型是叠加型的,即F(x)=∑i=1kfi(x;θi)F(x)=∑i=1kfi(x;θi)F(x)=\sum_{i=1}^{k}f_i(x;\theta_i) (2)目标函数:选定某种损失函数作为...

    Boosting算法(提升法)

    算法的三个要素

    (1)函数模型:Boosting的函数模型是叠加型的,即

    F(x)=i=1kfi(x;θi)F(x)=∑i=1kfi(x;θi)

    (2)目标函数:选定某种损失函数作为优化目标
    E{F(x)}=E{i=1kfi(x;θi)}E{F(x)}=E{∑i=1kfi(x;θi)}

    (3)优化算法:贪婪地逐步优化,即
    θm=argminθmE{i=1m1fi(x;θi)+fm(x;θm)}θm∗=arg⁡minθmE{∑i=1m−1fi(x;θi∗)+fm(x;θm)}

    需要解决的问题

    对于Boosting算法,需要解决两个问题:

    1. 如何调整训练集,使得在训练集上训练的弱分类器得以进行;
    2. 如何将训练得到的各个弱分类器联合起来形成强分类器。

    特点:

    1. Boosting是一种框架算法,拥有系列算法,如AdaBoost,GradientBoosting,LogitBoost等算法。
    2. Boosting系列算法的主要区别在于其三要素选取的函数不同
    3. 可以提高任意给定学习算法准确度
    4. 训练过程为阶梯状,弱分类器按次序一一进行训练(实现上可以做到并行),弱分类器的训练集按照某种策略每次都进行一定的转化。最后以一定的方式将弱分类器组合成一个强分类器。
    5. Boosting中所有的弱分类器可以是不同类的分类器

    图示:

    这里写图片描述


    AdaBoost算法

    算法的实现:

    1、若为Adaboost分类,函数模型使用CART分类树;若为Adaboost回归,函数模型使用CART回归树。

    2、损失函数为“指数损失函数”

    3、针对Boosting需要解决的两个问题,AdaBoost算法采用了以下策略:

    1. 使用加权后选取的训练数据代替随机选取的训练样本,这样将训练的焦点集中在比较难分的训练数据样本上;
    2. 将弱分类器联合起来,使用加权的投票机制代替平均投票机制。让分类效果好的弱分类器具有较大的权重,而分类效果差的分类器具有较小的权重。

    特点

    1. 核心思想:针对同一个训练集训练不同的弱分类器,然后把这些弱分类器根据权值集合起来,构造一个更强的最终分类器。
    2. Adaboost算法是Boosting系列算法之一,强分类器输出结果的是弱分类器输出结果的加权平均。
    3. Adaboost算法有两个权值,分别为样本权值和弱分类器权值,其主要特征就是在于样本权值的更新和弱分类器权值的更新。
    4. Adaboost中所有的弱分类器必须是同一种分类器,不能在同一个Adaboost算法的迭代步骤中使用不同的弱分类器。
    5. 弱分类器可并行实现。

    算法的优缺点

    Adaboost的主要优点有:

    1. Adaboost作为分类器时,分类精度很高
    2. 在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。
    3. 作为简单的二元分类器时,构造简单,结果可理解。
    4. 不容易发生过拟合

    Adaboost的主要缺点有:

    1. 对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。
          

    权值更新规则

    样本权值更新:

    对于分类错误的样本,加大其对应的权重;而对于分类正确的样本,降低其权重,这样分错的样本就被突显出来,从而得到一个新的样本分布。

    弱分类器权值更新:

    对于准确率较高的弱分类器,加大其权重;对于准确率较低的弱分类器,减小其权重。

    适用范围

    1. 用于二分类或多分类的应用场景
    2. 用于做分类任务的baseline

    算法过程

    将样本权值被更新过的新数据集送给下层弱分类器进行训练,最后将每次训练得到的弱分类器根据弱分类器权重融合起来,从而得到强分类器。

    1. 给定训练样本集S,其中X和Y分别对应于正例样本和负例样本; T为训练的最大循环次数;
    2. 初始化样本权重为1/n ,即为训练样本的初始概率分布;
    3. 第一次迭代:
      (1) 训练样本的概率分布相当下,训练弱分类器;
      (2) 计算弱分类器的错误率;
      (3) 选取合适阈值,使得误差最小;
      (4) 更新样本权重;
      经T次循环后,得到T个弱分类器,按更新的弱分类器权重叠加,最终得到的强分类器。

    Gradient Boosting算法

    算法的实现:

    1、函数模型为CART回归树模型

    2、损失函数一般为“对数损失函数”或“指数损失函数”
    Gradient Boosting算法即梯度提升算法,

    3、优化算法采用梯度下降

    4、针对Boosting需要解决的两个问题,Gradient Boosting算法采用了以下策略:

    1. 将残差作为下一个弱分类器的训练数据,每个新的弱分类器的建立都是为了使得之前弱分类器的残差往梯度方向减少。
    2. 将弱分类器联合起来,使用累加机制代替平均投票机制。

    特点

    1. 核心思想:每个新的弱分类器的建立是为了使得之前弱分类器的残差往梯度方向减少,然后把弱分类器进行累加得到强分类器。
    2. GBDT算法是Boosting系列算法之一,强分类器的输出结果是弱分类器输出结果的累加。
    3. GBDT中所有的弱分类器只能是CART回归树
    4. 弱分类器无法并行实现

    算法的优缺点

    GBDT主要的优点有:

    1. 可以灵活处理各种类型的数据,包括连续值和离散值。
    2. 在相对少的调参时间情况下,预测的准备率也可以比较高。这个是相对SVM来说的。
    3. 使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。

    GBDT的主要缺点有:

    1. 由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。

    适用范围

    1. GBDT几乎可用于所有的回归问题(线性/非线性)
    2. 亦可用于二分类问题(设定阈值,大于阈值为正例,小于阈值为反例)
    3. 不太适用于多分类问题

    算法过程

    1. 对数据拟合一个简单的线性回归或决策树
    2. 计算误差残差。实际目标值减去预测目标值
    3. 将误差残差的新模型作为具有相同输入变量的目标变量
    4. 将预测的残差添加到先前的预测中[y_predicted2 = y_predicted1 + e1_predicted]
    5. 在剩余的残差上拟合另一个模型。即[e2 = y-y_predicted2]并重复步骤2到5,直到它开始过拟合或残差总和变成恒定。

    工作过程实例

    以年龄预测为例,A,B,C,D四个人,他们的年龄分别是14,16,24,26。其中A、B分别是高一和高三学生;C,D分别是应届毕业生和工作两年的员工。如果是用一棵传统的回归决策树来训练,会得到如下图1所示结果:

    这里写图片描述

    现在我们使用GBDT来做这件事,由于数据太少,我们限定叶子节点做多有两个,即每棵树都只有一个分枝,并且限定只学两棵树。我们会得到如下图2所示结果:

    这里写图片描述

    在第一棵树分枝和图1一样,由于A,B年龄较为相近,C,D年龄较为相近,他们被分为两拨,每拨用平均年龄作为预测值。此时计算残差(残差的意思就是: A的预测值 + A的残差 = A的实际值),所以A的残差就是16-15=1(注意,A的预测值是指前面所有树累加的和,这里前面只有一棵树所以直接是15,如果还有树则需要都累加起来作为A的预测值)。进而得到A,B,C,D的残差分别为-1,1,-1,1。然后我们拿残差替代A,B,C,D的原值,到第二棵树去学习,如果我们的预测值和它们的残差相等,则只需把第二棵树的结论累加到第一棵树上就能得到真实年龄了。这里的数据显然是我可以做的,第二棵树只有两个值1和-1,直接分成两个节点。此时所有人的残差都是0,即每个人都得到了真实的预测值。

    换句话说,现在A,B,C,D的预测值都和真实年龄一致了。Perfect!:

    A: 14岁高一学生,购物较少,经常问学长问题;预测年龄A = 15 – 1 = 14

    B: 16岁高三学生;购物较少,经常被学弟问问题;预测年龄B = 15 + 1 = 16

    C: 24岁应届毕业生;购物较多,经常问师兄问题;预测年龄C = 25 – 1 = 24

    D: 26岁工作两年员工;购物较多,经常被师弟问问题;预测年龄D = 25 + 1 = 26


    参考链接:

    http://blog.csdn.net/liyuan123zhouhui/article/details/66968406

    展开全文
  • boosting系列算法

    千次阅读 2018-11-03 17:25:38
    boosting是一种集成学习算法,由一系列基本分类器按照不同的权重组合成为一个强分类器,这些基本分类器之间有依赖关系。包括Adaboost算法、提升树、GBDT算法。 一、Adaboost算法 1、基本思想 通过两个问题: 1)...

    boosting是一种集成学习算法,由一系列基本分类器按照不同的权重组合成为一个强分类器,这些基本分类器之间有依赖关系。包括Adaboost算法、提升树、GBDT算法。

    一、Adaboost算法

    1、基本思想
    通过两个问题:
    1)如何更新样本权重D? 提高被弱分类器错分样本的权值,降低正分样本的权值,作为下一轮基本分类器的训练样本。
    2)如何将弱分类器组合成强分类器? 加权多数表决,误差率小的分类器的权值大,使其在表决过程中起较大作用。
    AdaBoost是个二分类算法。
    2、推导
    Adaboost的基本分类器的损失函数为指数函数,推导过程就是围绕最小化损失函数展开的。主要目的是推导出样本权值的更新公式、基本分类器的权值计算公式。
    在这里插入图片描述
    3、算法描述
    在这里插入图片描述

    二、提升树算法

    1、基本思想
    当Adaboost算法中的基本分类器是cart回归树时,就是提升树,同时,损失函数变为平方误差损失函数。在Adaboost算法中通过改变样本的权重来进行每一轮的基本分类器的学习,在提升树算法中,是通过上一轮学习的残差进行本轮的学习。

    2、推导
    和Adaboost算法一样,也是求最小化损失函数下第m颗树模型的参数θm\theta_m
    在这里插入图片描述
    fm(x)f_m(x)是第m轮迭代的提升树模型,T(x;θm)T(x;\theta_m)是第m轮的树模型。最后我们得到的模型是fM(x)f_M(x)
    通过推导发现,每一轮拟合的是上一轮的残差,通过最小化平方损失函数来拟合。

    3、算法描述
    在这里插入图片描述
    一棵回归树:T(x;θm)=j=1JcjI(xRj)T(x;\theta_m)=\sum_{j=1}^J{c_jI( x \in R_j)}
    4、举例
    在这里插入图片描述

    三、GBDT

    1、基本思想
    和提升树算法差不多,只不过GBDT的损失函数是不再是平方损失函数,而是一般的损失函数,所以用损失函数的负梯度来代替残差,也就是说,每一轮拟合的是上一轮损失函数的负梯度,拟合的过程也是求最小二乘回归树的过程。

    2、算法描述
    在这里插入图片描述
    GBDT不再使用残差作为新的训练数据而是使用损失函数的梯度作为新的新的训练数据的y值,具体的来说就是使用损失函数对f(x)f(x)求梯度然后带入fm1(x)f_{m-1}(x)计算。

    GBDT与提升树之间的关系:
     提升树模型每一轮的训练都是靠上次的预测结果与真实值的差值作为新的训练数据进行重新训练,GBDT则是将残差计算替换成了损失函数的梯度方向,将上一次的预测结果带入梯度中求出本轮的训练数据,这两种模型就是在生成新的训练数据时采用了不同的方法。
     boosting tree和GBDT,每一轮的树都是二层的(根节点+叶子节点),与一般的决策树的对比:
     在这里插入图片描述

    四、XGBoost

    XGBoost 就是对GBDT的实现,但是一般来说,gradient boosting 的实现是比较慢的,因为每次都要先构造出一个树并添加到整个模型序列中。而 XGBoost 的特点就是计算速度快,模型表现好.
    表现快是因为它具有这样的设计:
    1、Parallelization: 训练时可以用所有的 CPU 内核来并行化建树。
    2、Distributed Computing : 用分布式计算来训练非常大的模型。
    3、Out-of-Core Computing: 对于非常大的数据集还可以进行 Out-of-Core Computing。
    4、Cache Optimization of data structures and algorithms: 更好地利用硬件。

    xgboost和GBDT的不同之处? 参考:https://www.zhihu.com/question/41354392/answer/98658997

    1、传统GBDT以CART作为基分类器,xgboost还支持线性分类器,传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。顺便提一下,xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。
    2、xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。
    3、Shrinkage(缩减),相当于学习速率(xgboost中的eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。(补充:传统GBDT的实现也有学习速率)
    4、列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
    5、对缺失值的处理。对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向。
    6、xgboost工具支持并行。boosting不是一种串行的结构吗?怎么并行的?注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
    可并行的近似直方图算法。树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以xgboost还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点。
    7、内置交叉验证,XGBoost允许在每一轮boosting迭代中使用交叉验证。
    调用:

    import xgboost
    watchlist = [(train_matrix, 'train'), (val_matrix, 'eval')]
    model = xgboost.train(param, train_matrix, num_boost_round=num_round, evals=watchlist, early_stopping_rounds=early_stopping_rounds)
    

    1、params 参数字典,里面包含着训练中的参数关键字和对应的值,形式是

    init_param = {
            'max_depth': 8,
            'eta': 0.1,#学习速率
            'silent': 1,
            'seed': 13,
            'objective': 'binary:logistic',
            'eval_metric': 'auc',
            'scale_pos_weight': 2,
            'subsample': 0.8,#每棵树,随机采样的比例。
            'colsample_bytree': 0.7,#列采样
            'min_child_weight': 100,
            'max_delta_step': 20
        }
    

    2、train_matrix:训练的数据
    3、num_boost_round :迭代的轮数
    4、evals :对evals列表中的元素在训练过程中进行评估。形式是evals = [(dtrain,’train’),(dval,’val’)],它使得我们可以在训练过程中观察验证集的效果。
    5、early_stopping_rounds,早期停止次数 ,假设为100,验证集的误差迭代到一定程度在100次内不能再继续降低,就停止迭代。这要求evals 里至少有 一个元素,如果有多个,按最后一个去执行。返回的是最后的迭代次数(不是最好的)。如果early_stopping_rounds 存在,则模型会生成三个属性,bst.best_score,bst.best_iteration,和bst.best_ntree_limit

    五、GBDT和随机森林

    有个问题,就是xgboost/gbdt在在调参的时候把树的最大深度调成6就有很高的精度了,但是用DecisionTree/RandomForest的时候需要把树的深度调到15或更高。

    从偏差和方差的角度来说比较好理解。要想精度高,泛化误差必须低,就机器学习算法来说,其泛化误差可以分解为两部分,偏差(bias)和方差(variance)。偏差指的是算法的期望预测与真实预测之间的偏差程度,反应了模型本身的拟合能力;方差度量了同等大小的训练集的变动导致学习性能的变化,刻画了数据扰动所导致的影响。我们尽可能地让方差和偏差小一点,想一下,决策树的深度就决定了模型的偏差(越深,偏差越小,但是太深,会导致过拟合,也就是方差会大),而随机森林中多棵树的组合就是为了降低方差。这就是为什么随机森林的树深度会很高的原因。而GBDT的每一棵树是拟合的上一棵树的偏差,本身就保证了偏差,所以问题就在于怎么选择使方差更小的分类器,故决策树的深度都很浅。

    展开全文
  • Boosting学习总结及理解(1)

    千次阅读 2018-08-18 12:05:14
    Boosting是集成学习算法中用的比较多的一类,主要的代表算法有Adaboost,GBDT,XGBoost。 首先boosting算法是一个不断迭代提升的过程,这个过程整体是串行的(XGBoost在建立回归树的过程中可以实现并行化)。首先...
  • Boosting介绍

    2019-08-02 14:46:17
    https://www.cnblogs.com/willnote/p/6801496.html 转载于:https://www.cnblogs.com/zwtgyh/p/11128906.html
  • boosting

    2020-06-10 00:10:29
    https://blog.csdn.net/qq547276542/article/details/78304454?utm_medium=distribute.pc_relevant_t0.none-task-blog-OPENSEARCH-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-...
  • 【模式识别】Boosting

    万次阅读 多人点赞 2019-10-03 15:38:32
    Boosting简介 分类中通常使用将多个弱分类器组合成强分类器进行分类的方法,统称为集成分类方法(Ensemble Method)。比较简单的如在Boosting之前出现Bagging的方法,首先从从整体样本集合中抽样采取不同的训练集...
  • Boosting(Adboost、GBDT、Xgboost)

    万次阅读 2018-02-28 17:37:14
    转载:https://www.cnblogs.com/willnote/p/6801496.html前言本文为学习boosting时整理的笔记,全文主要包括以下几个部分:对集成学习进行了简要的说明给出了一个Adboost的具体实例对Adboost的原理与学习过程进行了...
  • Boosting方法入门

    千次阅读 2019-05-29 21:39:58
    首先什么是boostingboosting是一种将弱分类器组合成强分类器的过程 构造一个强分类器很难 构造弱分类器不难 弱分类器的要求:强于随机猜测 (很浅的CART树即可) 用数学公式表示即: f(x)=∑m=1MαmΦm(x)f(x)=...
  • 常见的模型组合方法有:简单平均(Averaging),投票(voting),Bagging(randomforest),boosting(GBDT),stacking,blending等,在实际业务中,单一模型很难满足需求,组合模型才能达到业务的精度要求。...
  • 梯度计算2002年论文列表

    万次阅读 2019-12-14 13:16:23
    Minimum Majority Classification and Boosting (AAAI 2002) Philip M. Long [Paper] Ranking Algorithms for Named Entity Extraction: Boosting and the Voted Perceptron (ACL 2002) Michael Collins...
  • 梯度计算2003年论文列表

    万次阅读 2019-12-14 13:16:29
    On Boosting and the Exponential Loss (AISTATS 2003) Abraham J. Wyner [Paper] Boosting Support Vector Machines for Text Classification through Parameter-Free Threshold Relaxation (CIKM 2003)...
  • Gradient Boosting Research Papers. Machine learning NeurIPS ICML ICLR Computer vision CVPR ICCV ECCV Natural language processing ACL NAACL EMNLP Data KDD CIKM ICDM SDM PAKDD PKDD/ECML RECSY...
  • 梯度计算2001年论文列表

    万次阅读 2019-12-14 13:16:16
    Is Regularization Unnecessary for Boosting? (AISTATS 2001) Wenxin Jiang [Paper] Online Bagging and Boosting (AISTATS 2001) Nikunj C. Oza, Stuart J. Russell [Paper] Text Categorization U...
  • 梯度计算2006论文列表

    万次阅读 2019-12-14 13:16:49
    Gradient Boosting for Sequence Alignment (AAAI 2006) Charles Parker, Alan Fern, Prasad Tadepalli [Paper] Boosting Kernel Models for Regression (ICDM 2006) Ping Sun, Xin Yao [Paper] Boos...
  • 本上是平衡的。需要提醒的是,boosting方法也可以被递归地使用,即对分量分类器本身也进行boosting。用这种方式,可以获得非常小的分类误差率。甚至,在类别之间可分的情况下可以达到零误差。
  • 梯度计算2004年论文列表

    万次阅读 2019-12-14 13:16:36
    Online Parallel Boosting (AAAI 2004) Jesse A. Reichler, Harlan D. Harris, Michael A. Savchenko [Paper] A Boosting Approach to Multiple Instance Learning (ECML 2004) Peter Auer, Ronald Ortn...
  • 梯度计算2000年论文列表

    万次阅读 2019-12-14 13:16:10
    2000 Boosted Wrapper Induction (AAAI 2000) Dayne Freitag, Nicholas Kushmerick ...An Improved Boosting Algorithm and its Application to Text Categorization (CIKM 2000) Fabrizio Sebastiani, ...
  • 梯度计算2013年论文

    万次阅读 2019-12-14 13:17:38
    Boosting Binary Keypoint Descriptors (CVPR 2013) Tomasz Trzcinski, C. Mario Christoudias, Pascal Fua, Vincent Lepetit [Paper] [Code] PerturBoost: Practical Confidential Classifier Learning ...
1 2 3 4 5 ... 20
收藏数 30,402
精华内容 12,160
关键字:

boosting