Adaboost ,RF,GBDT,XGBoost,lightGBM 的对比

RF,GBDT,XGBoost,lightGBM 都属于集成学习:通过结合多个基学习器的预测结果来改善基本学习器的泛化能力和鲁棒性。

分为两类:

(1) 基本机器学习器之间存在强依赖关系,必须串行生成的序列化方法

(2)基本学习之间不存在强依赖关系,可以同时生成的并行化方法,前者代表Booting,后者代表Bagging和随机森林。

一 RF:

RF是Bagging的优化版本,改进1: 基本学习器限定为决策树,改进2: 除了bagging在样本上加上扰动,同时在属性上也加上扰动。即是在决策树学习的过程中引入了 随机属性的选择,对基决策树的每个结点,先从该结点的属性集合中选择一个包含k个属性的子集,然后再从这个子集中选择一个最优的属性用于划分。

1 .1 RF的算法:

输入样本D{(x1,y1),(x2,y2),...,(xm,ym)},弱分类器迭代次数T,输出为最终的强分类器f(x).
1)对于t=1,2,...,T:
  对训练集进行第t次随机采样,共采集m次,得到包含m个样本的采样集D-m
  用采样集D- m 训练第m个决策树模型Gm(x) ,在训练决策树模型的节点的时候,在所有样本特征中选择一部分样本特征,在这些随机选择的特征中选择一个最优的特征来做决策树的左右子树划分。

2)如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别
如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终模型输出。

决策树既能分类,又能回归,

1.2 RF  和bagging的对比:RF的起始性能较差,特别当只有一个基学习器时,随着学习器数目的增多,随机森林通常会收敛到更低的泛化误差,随机森林的训练效率也会高于Bagging,因为在单个决策树的构建中,Bagging使用的是“确定性”决策树,在选择特征划分结点时,要对所有的特征进行考虑,随机森林使用的是“随机性”特征数,只需要考虑特征的子集。

1.3 优缺点:

训练可以高度并行化,对于大数据时代的大样本训练速度有优势,能够处理很高维的数据,并且不要特征选择,而且在训练完后,给出特征的重要性,相对于Boosting系列的Adaboost和GBDT,RF的实现比较简单。

缺点: 噪声较大的分类或回归问题上容易过拟合。

二: GBDT 梯度提升树

属于Boosting,提升树是加法模型,学习算法为前向分布算法时的算法,它限定基本学习器为决策树,对于二分类问题,损失函数为指数函数,就是把AdaBoost算法中的基本学习器限定为二叉决策树就可以了,对于回归问题,损失函数为平方误差,此时,拟合的是当前模型的残差,GBDT 是对提升树算法的改进,提升树算法只适合误差函数为指数函数和平方误差,对于一般的损失函数,梯度提升树算法利用损失函数的附体的在当前模型的值,作为残差的近似值。

GBDT 会累加所有树的结果,而这种累加是无法通过分类完成的,因此GBDT的树都是CART 回归树,而不是分类树。

2.1 GBDT 与Boosting的区别:

与传统的Boosting区别较大,每一次计算都是为了减少上一次的残差,为了消除残差,可以在残差减小的梯度方向上建立模型,在GradientBoosting 中,每个新模型的建立就是为了使得之前的模型的残差·往梯度下降的方向,与传统的Boosting中关注的正确或错误样本的加权有很大区别。

三:XGBoost

XGBoost 是集成学习Boosting家族中的成员,在GBDT的基础上对Boosting算法进行改进,GBDT 用模型在数据上的负梯度作为残差的近似值,从而拟合残差,XGBoost 也是拟合在数据上的残差,但是他是用泰勒展开式对模型损失残差的近似,同时XGBoost 对模型的损失函数进行改进,并加入了模型复杂度的正则项。

3.1 XGBoost和GBDT的区别:

  • 传统的GBDT以CART树作为基学习器,XGBoost还支持线性分类器,这个时候XGBoost相当于L1和L2 正则化的逻辑斯蒂回归(分类)或者线性回归。
  • 传统的GBDT在优化的时候只用一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,得到一阶和二阶导数。
  • XGBoost 在代价函数中加入了正则项,用于控制模型的复杂度,从权衡方差偏差来看,它降低了模型的方差,使学习出来的模型更加简单,放置过拟合,这也就是XGBoost 优于传统GBDT的一个特性。

四: lightGBM

  • 4.1 lightGBM 与XGB的区别
  • xgboost 使用level-wise的分裂策略,lightGBM采用leaf-wise的策略,区别是xgboost对每一层所有节点做无差别分裂,可能有些节点的增益非常小,对结果影响不大,但是xgboost也进行了分裂,带来了不必要的开销,leaf-wise 做法是在当前所有叶子节点中选择分类收益最大的节点进行分裂,如此递归进行,很明显leaf-wise这种做法很容易过拟合,比较容易陷入比较高的深度中,因此需要对最大深度做限制,从而避免过拟合。
  • lightgbm 使用了基于histogram的决策树算法,这一点不同于xgboost中的exact算法,histogram 算法在内存和计算代价上都有不小的优势。
  • 直方图做差加速: 一个子节点的直方图可以通过父节点的直方图减去兄弟节点的直方图得到,从而加速计算
  • lightgbm 支持直接输入连续变量的特征: 对于离散特征分裂时,每个取值都当做一个桶,分裂时的增益算的是是否属于某个category的gain,类似于one-hot 编码。
  • 但实际上xgboost的近似直方图算法也类似lightgbm这里的直方图算法,为什么xgboost比lgb慢很多? xgb 在每一层都动态的构建直方图,它的直方图算法不是针对某个特点的feature的,而是所有feature共享一个直方图(每个样本的权重是二阶导),所以每一层都要重新构建直方图,lgb 对每个特征都有一个直方图,构建一次直方图就够了。
  • lgb 做了哪些并行:
  • 特征并行:对数据做垂直分割,然后将分割后的数据分散到各大worker上,各个workers 计算其拥有的数据的bestsplits point,之后再汇总得到全局最优分割点,lgb的做法是每个worker都拥有所有数据,再分割。
  • data 并行: 传统的data 并行是对数据集进行划分,也叫平行分割,分散到各个workers上后,workers 对得到的数据做直方图,汇总各个workers的直方图得到全局的直方图,lgb 认为这个操作的通讯开销较大,lgb的做法是使用Reduce Scatter的机制,不汇总所以直方图,只汇总不同worker的不同feature的直方图,这个汇总的直方图叫做split,最后同步。

五:Adaboost

adaboost 是基于boosting的思想,通过多个弱分类器的线性组合来得到强分类器,训练时重点关注被错分的样本,准确率高的弱分类器权重大。

训练时不断改变训练数据权重分布,使得被误分类的数据再后一轮的分类中受到更大的关注。

同时采用加权多数表决的方法,加大分类误差率小的弱分类器的权重,使其在最后表决中起更大的作用,减小误差率大的分类器的权重,使其在最后表决中起较小的作用,所有弱分类器的权重之和并不为1,是通过最后结果的符号来决定实例的类别,该结果的绝对值表示分类的确信度。

Adaboost的另外一种理解: 即可以认为其模型是加法模型,损失函数为指数函数,学习算法为前向分布算法的二分类学习方法。

加法模型就是多个基函数线性组合得到的模型

前向分布算法:对于加法模型,从前往后,每一步只学习一个基函数及其系数,而不是一出现学习所有的基函数,从而简化优化的复杂度。

 

参考:https://blog.csdn.net/u014248127/article/details/79015803

https://zhuanlan.zhihu.com/p/56137208

你可能感兴趣的:(机器学习)