集成学习

集成学习概念

  1. bagging与boosting

Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,即将弱分类器组装成强分类器的方法。

  • boosting

串行的方式训练基分类器,各分类器之间有依赖。每次训练时,对前一层基分类器分错的样本给与更高的权重

  • bagging

bagging是Bootstrap aggregating的意思,各分类器之间无强依赖(有放回随机采样训练),可以并行。

  1. 方差与偏差

    • 偏差:描述模型输出结果的期望与样本真实结果的差距

    • 方差:描述模型对于给定值的输出稳定性

  • 基分类器的错误,是偏差和方差之和;

  • boosting方法通过逐步聚焦分类器分错的样本,减少集成分类器的偏差

  • Bagging采用分而治之的策略,通过对样本多次采样,分别训练多个模型,减少方差

  • 为什么决策树是常用的基分类器

可以方便地将样本权重整合到训练过程中,不需要使用过采样的方法来调整样本权重-自带样本权重

决策树的表达能力和泛化能力,可以通过调节树的层数来做折中-易调节

数据样本扰动对决策树影响较大,因此不同子样本集生成的基分类器随机性就较大。这样的不稳定学习器更适合作为基分类器。

神经网络也适合做基分类器

模型

Adaboost

核心点:

  1. 对分类正确的样本降低权重
  2. 对错误分类的样本升高或者保持全都不变
  3. 在模型融合过程中,根据错误率对基分类器器进行加权融合,错误率低的分类器拥有更大的“话语权”

GBDT

优点:

  1. 预测阶段的计算速度快,树与树之间可并行化计算
  2. 分布稠密的数据集上,泛化能力和表达能力都很好。
  3. 采用决策树作为弱分类器使得GBDT模型具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系,并且也不需要对数据进行特殊的预处理如归一化等。

缺点:

  1. GBDT在高维稀疏的数据集上,表现不如支持向量机或者神经网络。
  2. GBDT在处理文本分类特征问题上,相对其他模型的优势不如它在处理数值特征时明显。
  3. 训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度

XGBoost

  1. GBDT是机器学习算法,XGBoost是该算法的工程实现。
  2. 在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。
  3. GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。
  4. 传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。
  5. 传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
  6. 传统的GBDT没有设计对缺失值进行处理,XGBoost可以自动学习出它的分裂方向。XGBoost对于确实值能预先学习一个默认的分裂方向。
  7. Shrinkage(缩减),相当于学习速率(xgboost中的eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。(补充:传统GBDT的实现也有学习速率)

LightGBM

比较:

  1. XGBoost使用基于预排序的决策树算法,每遍历一个特征就需要计算一次特征的增益,时间复杂度为O(datafeature)。
    而LightGBM使用基于直方图的决策树算法,直方图的优化算法只需要计算K次,时间复杂度为O(Kfeature)
  2. XGBoost使用按层生长(level-wise)的决策树生长策略,LightGBM则采用带有深度限制的按叶子节点(leaf-wise)算法。在分裂次数相同的情况下,leaf-wise可以降低更多的误差,得到更好的精度。leaf-wise的缺点在于会产生较深的决策树,产生过拟合。
  3. 支持类别特征,不需要进行独热编码处理
  4. 优化了特征并行和数据并行算法,除此之外还添加了投票并行方案
  5. 采用基于梯度的单边采样来保持数据分布,减少模型因数据分布发生变化而造成的模型精度下降
  6. 特征捆绑转化为图着色问题,减少特征数量

缺点:

  1. 处理缺失值,会先计算分割点,然后将缺失值样本分配给增益高的一侧ref

References

  1. 一篇文章搞定GBDT、Xgboost和LightGBM的面试
  2. GBDT、XGBoost、LightGBM的区别和联系