AdaBoost
基本概念
AdaBoost(Adaptive Boosting,自适应增强),其自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。后一个模型的训练永远是在前一个模型的基础上完成!
算法思想
• 初始化训练样本的权值分布,每个样本具有相同权重;
• 训练弱分类器,如果样本分类正确,则在构造下一个训练集中,它的权值就会被降低;反之提高。用更新过的样本集去训练下一个分类器;
• 将所有弱分类组合成强分类器,各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,降低分类误差率大的弱分类器的权重。
算法步骤
从Adaboost的例子中我们可以明显的看到Boosting的思想,对分类正确的样本降低了权重,对分类错误的样本升高或者保持权重不变。再最后进行模型融合的过程中,也根据错误率对基分类器进行加权融合,错误率低的分类器拥有更大的“话语权” 。
优缺点
优点:
分类精度高;
可以用各种回归分类模型来构建弱学习器,非常灵活;
不容易发生过拟合。
缺点:
对异常点敏感,异常样本在迭代中可能会获得较高权重, 影响最终的强学习器的预测准确性。
GBDT
基本概念
GBDT(Gradient Boosting Decision Tree),全名叫梯度提升决策树,是一种迭代的决策树算法,又叫 MART(Multiple Additive Regression Tree),它通过构造一组弱的学习器(树),并把多棵决策树的结果累加起来作为最终的预测输出。该算法将决策树与集成思想进行了有效的结合。
GBDT(Gradient Boosting Decision Tree)是一种迭代的决策树算法,该算法由多棵决策树组成,GBDT 的核心在于累加所有树的结果作为最终结果,所以 GBDT 中的树都是回归树,不是分类树,它是属于 Boosting 策略。GBDT 是被公认的泛化能力较强的算法。
GBDT 由三个概念组成:
Regression Decision Tree(即 DT)、Gradient Boosting(即 GB),和 Shrinkage(缩减)
回归树(Regression Decision Tree)-GBDT中的DT
如果认为 GBDT由很多分类树那就大错特错了(虽然调整后也可以分类)。对于分类树而言,其值加减无意义(如性别),而对于回归树而言,其值加减才是有意义的(如说年龄)。GBDT的核心在于累加所有树的结果作为最终结果(多个弱分类器的预测结果线性相加),所以 GBDT中的树都是回归树,不是分类树,这一点相当重要。回归树在分枝时会穷举每一个特征的每个阈值以找到最好的分割点,衡量标准是最小化均方误差。
梯度提升(Gradient Boosting)-GB,也是GBDT的核心
GBDT的核心在于累加所有树的结果作为最终结果,GBDT的每一棵树都是以之前树得到的残差来更新目标值,这样每一棵树的值加起来即为 GBDT的预测值。
基本思想是根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,然后将训练好的弱分类器以累加的形式结合到现有模型中。在每一轮迭代中,首先计算出当前模型在所有样本上的负梯度,然后以该值 为目标训练一个新的弱分类器进行拟合并计算出弱分类器的权重,最终实现对模型的更新。
与 Adaboost的对比
相同:
1. 都是 Boosting家族成员,使用弱分类器;
2. 都使用前向分布算法;
不同:
1. 迭代思路不同:Adaboost是通过提升错分数据点的权重来弥补模型的不足(利用错分样本),而 GBDT是通过算梯度来弥补模型的不足(利用残差);
2. 损失函数不同:AdaBoost采用的是指数损失,GBDT使用的是绝对损失或者Huber 损失函数;
XGBoost
基本概念
XGBoost是基于梯度提升框架的一个优化版本。梯度提升是一种迭代的集成算法,通过不断构建新的树来补充之前模型的错误。它依赖多个决策树的集成效果,来提高最终模型的预测能力。
作为Boosting算法,XGBoost中自然包含Boosting三要素:
损失函数:用以衡量模型预测结果与真实结果的差异。
弱评估器 :(一般为)决策树,不同的boosting算法使用不同的建树过程。
综合集成结果:即集成算法具体如何输出集成结果
并且XGBoost同样遵循Boosting算法建模的基本流程
XGBoost的优缺点
缺点
• 精度更高:GBDT 只用到一阶泰勒展开,而 XGBoost 对损失函数进行了二阶泰勒展开。XGBoost引入二阶导一方面是为了增加精度,另一方面也是为了能够自定义损失函数,二阶泰勒展开可以近似大量损失函数;
• 灵活性更强:GBDT 以 CART 作为基分类器,XGBoost 不仅支持 CART 还支持线性分类器,使用线性分类器的 XGBoost 相当于带 L1 和 L2 正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。此外,XGBoost 工具支持自定义损失函数,只需函数支持一阶和二阶求导;
• 正则化:XGBoost 在目标函数中加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶
子节点个数、叶子节点权重的 L2 范式。正则项降低了模型的方差,使学习出来的模型更加简单,
有助于防止过拟合,这也是XGBoost优于传统GBDT的一个特性。
缺点
• 虽然利用预排序和近似算法可以降低寻找最佳分裂点的计算量,但在节点分裂过程中仍需要遍历
数据集;
• 预排序过程的空间复杂度过高,不仅需要存储特征值,还需要存储特征对应样本的梯度统计值的
索引,相当于消耗了两倍的内存。
XGBoost与GBDT的联系和区别
(1)GBDT是机器学习算法,XGBoost是该算法的工程实现。
(2)正则项:在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。
(3)导数信息:GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。
(4)基分类器:传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。
(5)子采样:传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样。
(6)缺失值处理:传统GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略。
(7)并行化:传统GBDT没有进行并行化设计