集成学习-boosting

综合学习

是指构建多个分类器对数据集进行预测,然后采用一定的策略将多个分类器预测的结果整合为最终的预测结果

提升算法

boosting通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类性能。
从弱学习器算法开始,反复学习得到一系列弱分类器(基本分类器),将这些弱分类器组合成强分类器
将弱学习器提升为强学习器的算法,属于集成学习(ensemble learning)的范畴。各分类器之间有依赖关系,串行
基于梯度提升算法的学习器叫做 GBM(Gradient Boosting Machine)。理论上,GBM 可以选择各种不同的学习算法作为基学习器。GBDT 实际上是 GBM 的一种情况。
GBM
B(Boosting)是集成方法中的一种, 集成方法的主要思想是利用一定的手段学习出多个基学习器,而且这多个基学习器要求是弱学习器,然后将多个基学习器进行组合。boosting方法通过分步迭代(stage-wise)的方式来构建模型,每一步迭代构建的弱学习器都是为了弥补已有模型的不足。

G(Gradient)是指用来最小化损失函数的方法,传统的Boosting模型,如Adaboost,最小化损失函数的方式是,每次迭代后,通过更新样本权重分布(分对的样本权重变小,分错的样本权重变大),让后一个基学习器更加关注分错的样本,这样一轮轮的迭代下去,从而达到使损失函数最小化的目标。Adaboost的损失函数是指数损失函数,所以比较好用数学推导的方式去计算每一次迭代时让损失函数达到最小值的最优解,但是其它的损失函数可能不那么容易优化,为了找到一种通用的最优化损失函数的方法,Gradient Boosting被提出来了,Gradient Boosting是指***每一步迭代,都是用损失函数的负梯度来拟合弱学习器,以达到使损失函数最小化的目的***,GBM 在损失函数的选择上有更大的灵活性。这和梯度下降法的思想是一样的,通过找到使损失函数下降最快的方向,一步一步逼近最小值点
(***梯度***本义是向量(vector),表示函数在该点的方向导数沿该方向取最大值,即函数在该点沿该方向(这个梯度的梯度。方向)变化最快,变化率最大(即梯度的模数)。
GBM (Gradient Boosting Method)⽅法是⼀类通⽤的⽤梯度⽅式来学习前向加法模型的⽅法。这⾥我们并未要求基学习器 ⼀定是决策树。当我们把基模型确定为 cart 决策树时,我们的⽅法就变为GBDT ⽅法
GBDT 的实现⽅式有很多,有⽐较原始的 GBDT 的实现,有在 GBDT 上进⾏改进,得到的 XGB 的实现。LGB 则是在 XGB 对 GBDT 的公式改进基础上,做的进⼀步的优化。
集成学习-boosting

GBDT(Gradient Boosting Decision Tree)

梯度提升决策树

提升树

boosting 方法实际上使用了加法模型(基函数的线性组合)和前向分布算法
以决策树为基函数的boosting方法称为boosting tree

梯度提升

对于一般的损失函数,梯度提升算法(最速下降的逼近法),利用当前模型中损失函数的负梯度的值作为回归问题的提升树算法中残差的近似值,拟合回归树来实现学习。优化过程

GBDT 算法可以看成是由 K 棵树组成的加法模型
是迭代的决策树算法,通过将多棵决策树组合,所有决策树的结果加起来得到最终的答案。(这⾥的决策树⼀般指 CART 决策树)
是一种基于boosting增强策略的加法模型,训练的时候采用前向分布算法进行贪婪学习,每次迭代都学习一棵CART树来拟合之前 t-1 棵树的预测结果与训练样本真实值的残差。

GBDT的设计思路是:我要迭代地找到一个加法模型,在不改变上一轮模型的情况下,找到一个新的基学习器使得损失最小。于是在每一轮迭代内,我们就存在一个优化问题:就是要求得一个函数(新加进去的基函数),使得损失函数达到最小值。但这个优化问题不是很好搞。于是为了求解这个优化问题,我们把函数看作为特殊的“参数”,用“梯度下降”的办法来搞。用“梯度下降”就要求负梯度(导数)。结果在“平方损失”下,一求导发现,求出来的这玩意儿其实就是上一轮模型所产生的残差。于是说“GBDT拟合了残差”。但这只是在损失函数为平方损失的情况下。当损失函数并不是平方损失的时候,函数的负梯度就不是简单的Yi-Fm-1(Xi )了,这个时候就不能说“GBDT拟合了残差”。因此也就不能这样直接去拟合上一轮的残差,而是要拟合负梯度。
GBDT误区

训练步骤
集成学习-boosting
GBM & GBDT详解
Random Forest、Adaboost、GBDT
为什么GBDT中要拟合残差?

首先,GBDT拟合的不是残差,而是负梯度。只是当损失函数为平方损失的时候,负梯度正好为残差。

为什么GBDT中要拟合负梯度?

GBDT通过弱学习器的累加实现强学习器,每个弱学习器需要不断减小损失函数,即每加一个树都应该减小损失函数。用集成学习-boosting代表k棵树累加的结果,第i棵树的输出表示为 fi

GBDT应用于回归问题
因为回归问题的损失函数一般是平方差损失函数,此时的残差正好等于预测值与实际值的差值。每次用决策树拟合差值,使得残差越来越小

CART“分类回归树”
分割训练集,使分割集的纯度变得“纯”
如何定义纯度:
回归问题:标签是连续的,使用方差来定义纯度。
分类问题:标签离散,使⽤熵和GINI指数定义。
注意:除法前后,集合从一变为二,因此需要对纯度进行加权求和。
如何划分:
遍历特征,遍历样本对应的特征值。分别计算纯度总和,并选择纯度增加最大的一个。
叶节点值的确定:
当我们划分为叶子节点时,这个叶子节点对应的预测值就是落在这个叶子节点上的训练集的平均值(连通
延续标签是均值,类别标签是类别比例)

XGB

是GBDT算法的一个工程实现。最底层模型仍然是前向加法模型,但不同点在于不是简单通过梯度下降来进⾏优化,⽽是巧妙的引⼊树的正则项和⼆阶泰勒展开,使得 GBDT 在单个树的分裂和叶⼦节点值确定变得更加的简单。虽然公式变简单,但是它在某种程度上反⽽更加精确了。

XGBoost与GBDT有什么不同

基分类器(灵活性更强):XGBoost的基分类器不仅支持CART决策树,还支持线性分类器,此时XGBoost相当于带L1和L2正则化项的Logistic回归(分类问题)或者线性回归(回归问题)。
导数信息(精度更高):XGBoost对损失函数做了二阶泰勒展开,GBDT只用了一阶导数信息,并且XGBoost还支持自定义损失函数,只要损失函数一阶、二阶可导。
正则项:XGBoost的目标函数加了正则项, 相当于预剪枝,使得学习出来的模型更加不容易过合。
列抽样:XGBoost支持列采样,与随机森林类似,用于防止过拟合。(降低过拟合,还能减少计算)
缺失值处理:对树中的每个非叶子结点,XGBoost可以自动学习出它的默认分裂方向。如果某个样本该特征值缺失,会将其划入默认分支。
并行化:注意不是tree维度的并行,而是特征维度的并行。XGBoost预先将每个特征按特征值排好序,存储为块结构,分裂结点时可以采用多线程并行查找每个特征的最佳分割点,极大提升训练速度。
优势
精度更高:GBDT 只用到一阶泰勒展开,而 XGBoost 对损失函数进行了二阶泰勒展开。XGBoost 引入二阶导一方面是为了增加精度,另一方面也是为了能够自定义损失函数,二阶泰勒展开可以近似大量损失函数;
灵活性更强:GBDT 以 CART 作为基分类器,XGBoost 不仅支持 CART 还支持线性分类器,(使用线性分类器的 XGBoost 相当于带 L1 和 L2 正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题))。此外,XGBoost 工具支持自定义损失函数,只需函数支持一阶和二阶求导;
正则化:XGBoost 在目标函数中加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、叶子节点权重的 L2 范式。正则项降低了模型的方差,使学习出来的模型更加简单,有助于防止过拟合;
Shrinkage(缩减):相当于学习速率。XGBoost 在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间;
列抽样:XGBoost 借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算;
缺失值处理:XGBoost 采用的稀疏感知算法极大的加快了节点分裂的速度;
可并行化操作:块结构可以很好地支持并行计算。

lightgbm

XGBoost、LightGBM

LightGBM 由微软提出,主要用于解决 GDBT 在海量数据中遇到的问题,以便其可以更好更快地用于工业实践中。
从 LightGBM 名字我们可以看出其是轻量级(Light)的梯度提升机(GBM),其相对 XGBoost 具有训练速度快、内存占用低的特点

lightgbm的分枝模式为leaf-wise,即遍历当前所有待分枝节点,不需要一定在最下边一层,谁的分裂增益大就分谁。而XGBoost的分枝模式为level-wise,即分完一层再分下一层,可能一层中有些叶子分裂增益极小,但是仍然要花费时间和空间去分裂
那么 LightGBM 到底如何做到更快的训练速度和更低的内存使用的呢?

我们刚刚分析了 XGBoost 的缺点,LightGBM 为了解决这些问题提出了以下几点解决方案:
LightGBM详解

  • 单边梯度采样算法;
  • 直方图算法;直方图差分加速具有正则化的效果,有效防止模型过拟合
  • 互斥特征捆绑算法;
  • 基于最大深度的 Leaf-wise 的垂直生长算法; 带深度限制的 Leaf-wise 算法
  • 每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环。Level-wise相比,优点在于:在分裂次数相同的情况下,Leaf-wise可以降低更多的误差,得到更好的精度。缺点在于:可能会长出比较深的决策树,产生过拟合。因此LightGBM会在Leaf-wise之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合。
    工程优化
  • 类别特征的最优分割;直接支持类别特征
    LightGBM优化了对类别特征的支持,可以直接输入类别特征,不需要额外的0 / 1 展开。
    LightGBM采用 many-vs-many 的切分方式将类别特征分为两个子集,实现类别特征的最优切分
    其基本思想在于每次分组时都会根据训练目标对类别特征进行分类,在枚举分割点之前,先把直方图按照每个类别对应的label均值进行排序;然后按照排序的结果依次枚举最优分割点
  • 特征并行(不同机器在不同特征集上搜索最优分割点,然后机器间同步最优分割点
  • 数据并行
  • 缓存优化。

shap

SHAP | 机器学习模型解释库
每个特征对预测的贡献有多大
Shapley值就能起到特征权重测度的作用。
每个特征对最终预测和平均预测之间差异的贡献有多大
Shapley值被广泛地应用于求解群体中每个工人(特征)的贡献问题

  • 获取所有不包含特征i的子集
  • 找出特征i对这些子集中每个子集的边际贡献
  • 聚合所有边际贡献来计算特征i的贡献
    总贡献等于预测与平均预测之间的差值

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2022年4月20日 下午6:11
下一篇 2022年4月20日 下午6:28

相关推荐