机器学习我爱编程

sklearn、XGBoost、LightGBM的文档阅读小记(

2018-04-10  本文已影响566人  只为此心无垠

转载文章,原文链接sklearn、XGBoost、LightGBM的文档阅读小记

目录

  1. 1. sklearn集成方法
    1. 1.1. bagging
      1. 1.1.1. 基本思想
      2. 1.1.2. 常见变体(按照样本采样方式的不同划分)
      3. 1.1.3. sklearn-bagging
        1. 1.1.3.1. 学习器
        2. 1.1.3.2. 参数
      4. 1.1.4. sklearn-forests of randomized trees
        1. 1.1.4.1. 学习器
        2. 1.1.4.2. 调参
        3. 1.1.4.3. 方法
        4. 1.1.4.4. 特征选择
        5. 1.1.4.5. 随机森林与KNN
    2. 1.2. boosting
      1. 1.2.1. 基本思想
      2. 1.2.2. sklearn-AdaBoost
      3. 1.2.3. sklearn-GBRT
        1. 1.2.3.1. 概述
        2. 1.2.3.2. 优缺点
        3. 1.2.3.3. 学习器
        4. 1.2.3.4. 正则化
        5. 1.2.3.5. 可解释性
    3. 1.3. VotingClassifier
  2. 2. XGBoost
    1. 2.1. 过拟合
    2. 2.2. 数据类别分布不均
    3. 2.3. 调参
      1. 2.3.1. 一般参数
      2. 2.3.2. 基学习器参数
      3. 2.3.3. 任务参数
      4. 2.3.4. 命令行参数
  3. 3. LightGBM
    1. 3.1. 特点
      1. 3.1.1. 效率和内存上的提升
      2. 3.1.2. 稀疏特征优化
      3. 3.1.3. 准确率上的优化
        1. 3.1.3.1. leaf-wise(best-first)树生长策略
        2. 3.1.3.2. 直接支持类别特征
      4. 3.1.4. 网络通信优化
      5. 3.1.5. 并行学习优化
        1. 3.1.5.1. 特征并行
        2. 3.1.5.2. 数据并行
        3. 3.1.5.3. 并行投票
      6. 3.1.6. 其他特点
        1. 3.1.6.1. 直接支持类别(标称)特征
        2. 3.1.6.2. 早停止
        3. 3.1.6.3. 实践上
        4. 3.1.6.4. 支持的任务
        5. 3.1.6.5. 支持的评价指标metric
    2. 3.2. 调参
      1. 3.2.1. 核心参数
      2. 3.2.2. 训练控制参数
        1. 3.2.2.1. 防止过拟合
      3. 3.2.3. IO参数
        1. 3.2.3.1. 直方图相关
        2. 3.2.3.2. 特征相关
        3. 3.2.3.3. 内存相关
        4. 3.2.3.4. 缺失值
      4. 3.2.4. 目标参数
      5. 3.2.5. 调参小结
        1. 3.2.5.1. leaf-wise
        2. 3.2.5.2. 效率
        3. 3.2.5.3. 准确率
        4. 3.2.5.4. 过拟合
  4. 4. 总结
    1. 4.1. GBDT vs. XGBoost vs. LightGBM(论文层面)
      1. 4.1.1. GBDT vs. XGBoost
      2. 4.1.2. XGBoost vs. LightGBM
    2. 4.2. sklearn GBDT vs. XGBoost vs. LightGBM(实现层面)
      1. 4.2.1. sklearn GBDT vs. XGBoost
      2. 4.2.2. XGBoost vs. LightGBM

本文主要是针对sklearn,XGBoost,LightGBM的官方文档阅读的一些整理,主要针对sklearn的集成方法、以及gbdt族模型的具体实现差异以及各个模型的重要参数、特点做了一个整理

sklearn集成方法

集成方法的目的是结合一些基于某些算法训练得到的基学习器来改进其泛化能力和鲁棒性(相对单个的基学习器而言)
主流的两种做法分别是:

bagging

基本思想

独立的训练一些基学习器(一般倾向于强大而复杂的模型比如完全生长的决策树),然后综合他们的预测结果,通常集成模型的效果会优于基学习器,因为模型的方差有所降低。

常见变体(按照样本采样方式的不同划分)

sklearn-bagging

学习器

参数

Note:方差的产生主要是不同的样本训练得到的学习器对于同一组测试集做出分类、预测结果的波动性,究其原因是基学习器可能学到了所供学习的训练样本中的局部特征或者说是拟合了部分噪声数据,这样综合不同的学习器的结果,采取多数表决(分类)或者平均(回归)的方法可以有效改善这一状况

sklearn-forests of randomized trees

学习器

Notes:

调参

方法

特征选择

特征重要性评估:一棵树中的特征的排序(比如深度)可以用来作为特征相对重要性的一个评估,居于树顶端的特征相对而言对于最终样本的划分贡献最大(经过该特征划分所涉及的样本比重最大),这样可以通过对比各个特征所划分的样本比重的一个期望值来评估特征的相对重要性,而在随机森林中,通过对于不同树的特征的期望取一个平均可以减小评估结果的方差,以供特征选择;在sklearn中这些评估最后被保存在训练好的模型的参数featureimportances里,是各个特征的重要性值经过归一化的结果,越高代表特征越匹配预测函数

Notes:

随机森林与KNN

boosting

基本思想

一个接一个的(串行)训练基学习器,每一个基学习器主要用来修正前面学习器的偏差。

sklearn-AdaBoost

Notes:调参的关键参数是基学习器的数量n_estimators以及基学习器本身的复杂性比如深度max_depth或者叶节点所需的最少样本数min_samples_leaf

sklearn-GBRT

概述

Gradient Tree Boosting或者说GBRT是boosting的一种推广,是的可以应用一般的损失函数,可以处理分类问题和回归问题,应用广泛,常见应用场景比如网页搜索排序和社会生态学

优缺点

学习器

正则化

可解释性

单一的决策树可以通过将树结构可视化来分析和解释,而梯度上升模型因为由上百课回归树组成因此他们很难像单独的决策树一样被可视化,不过也有一些技术来辅助解释模型

Notes:

VotingClassifier

Voting的基本思想是将不同学习器的结果进行硬投票(多数表决)或者软投票(对预测概率加权平均)来对样本类别做出预估,其目的是用来平衡一些表现相当且都还不错的学习器的表现,以消除它们各自的缺陷

XGBoost

过拟合

XGBoost里可以使用两种方式防止过拟合

数据类别分布不均

对于XGBoost来说同样是两种方式

调参

一般参数

主要用于设置基学习器的类型

基学习器参数

在基学习器确定后,根据基学习器来设置的一些个性化的参数

任务参数

根据任务、目的设置的参数,比如回归任务与排序任务的目的是不同的

命令行参数

LightGBM

特点

效率和内存上的提升

直方图算法,LightGBM提供一种数据类型的封装相对Numpy,Pandas,Array等数据对象而言节省了内存的使用,原因在于他只需要保存离散的直方图,LightGBM里默认的训练决策树时使用直方图算法,XGBoost里现在也提供了这一选项,不过默认的方法是对特征预排序,直方图算法是一种牺牲了一定的切分准确性而换取训练速度以及节省内存空间消耗的算法

稀疏特征优化

对稀疏特征构建直方图时的时间复杂度为O(2*#非零数据)

准确率上的优化

LEAF-WISE(BEST-FIRST)树生长策略

相对于level-wise的生长策略而言,这种策略每次都是选取当前损失下降最多的叶节点进行分割使得整体模型的损失下降得更多,但是容易过拟合(特别当数据量较小的时候),可以通过设置参数max_depth来控制树身防止出现过拟合

Notes:XGBoost现在两种方式都是支持的

直接支持类别特征

对于类别类型特征我们原始的做法是进行独热编码,但是这种做法对于基于树的模型而言不是很好,对于基数较大的类别特征,可能会生成非常不平衡的树并且需要一颗很深的树才能达到较好的准确率;比较好的做法是将类别特征划分为两个子集,直接划分方法众多(2^(k-1)-1),对于回归树而言有一种较高效的方法只需要O(klogk)的时间复杂度,基本思想是对类别按照与目标标签的相关性进行重排序,具体一点是对于保存了类别特征的直方图根据其累计值(sum_gradient/sum_hessian)重排序,在排序好的直方图上选取最佳切分位置

网络通信优化

使用collective communication算法替代了point-to-point communication算法提升了效率

并行学习优化

特征并行

特征并行是为了将寻找决策树的最佳切分点这一过程并行化

Notes:典型的空间换时间,差别就是减少了传输切分结果的步骤,节省了这里的通信消耗

数据并行

上述特征并行的方法并没有根本解决寻找切分点的计算效率问题,当记录数过大时需要考虑数据并行的方法

并行投票

进一步减小了数据并行中的通信代价,通过两轮的投票来减小特征直方图中的通信消耗

其他特点

直接支持类别(标称)特征

LightGBM可以直接用类别特征进行训练,不必预先进行独热编码,速度会提升不少,参数设置categorical_feature来指定数据中的类别特征列

早停止

sklearn-GBDT,XGBoost,LightGBM都支持早停止,不过在细节上略有不同

实践上

支持的任务

支持的评价指标METRIC

调参

核心参数

训练控制参数

防止过拟合

IO参数

直方图相关

特征相关

内存相关

缺失值

目标参数

调参小结

LEAF-WISE

效率

准确率

过拟合

总结

GBDT vs. XGBoost vs. LightGBM(论文层面)

GBDT vs. XGBoost

XGBoost vs. LightGBM

sklearn GBDT vs. XGBoost vs. LightGBM(实现层面)

实际在库的实现层面原始论文里的很多区别是不存在的,差异更多在一些工程上的性能优化

sklearn GBDT vs. XGBoost

XGBoost vs. LightGBM

XGBoost目前已经实现了LightGBM之前不同的一些方法比如直方图算法,两者的区别更多的在与LightGBM优化通信的的一些处理上

参考资料

上一篇下一篇

猜你喜欢

热点阅读