专栏首页算法工程师的养成之路集成算法梳理——XGBoost

集成算法梳理——XGBoost

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/JN_rainbow/article/details/89194166

文章目录

算法原理

算法思想就是不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数,去拟合上次预测的残差。当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数,最后只需要将每棵树对应的分数加起来就是该样本的预测值.

损失函数

对于分类问题,常用的损失函数为logloss.

对于回归问题,常用的损失函数为MSE、MAE.

分裂结点算法

  1. exact greedy algorithm—贪心算法获取最优切分点
  2. approximate algorithm— 近似算法,提出了候选分割点概念,先通过直方图算法获得候选分割点的分布情况,然后根据候选分割点将连续的特征信息映射到不同的buckets中,并统计汇总信息
  3. Weighted Quantile Sketch—分布式加权直方图算法

正则化

  1. 损失函数中加入了正则项
  2. 样本采样和列采样

对缺失值处理

xgboost处理缺失值的方法和其他树模型不同。xgboost把缺失值当做稀疏矩阵来对待,本身在节点分裂时不考虑缺失值的数值,但确定分裂的特征后,缺失值数据处理策略是落在哪个子结点得分高,就放到哪里。如果训练中没有数据缺失,预测时出现了数据缺失,那么默认被分类到右子树。

优缺点

优点

  1. xgBoosting支持线性分类器,相当于引入L1和L2正则化项的逻辑回归(分类问题)和线性回归(回归问题).
  2. xgBoosting对代价函数做了二阶Talor展开,引入了一阶导数和二阶导数.
  3. 当样本存在缺失值是,xgBoosting能自动学习分裂方向.
  4. xgBoosting借鉴RF的做法,支持列抽样,这样不仅能防止过拟合,还能降低计算.
  5. xgBoosting的代价函数引入正则化项,控制了模型的复杂度,正则化项包含全部叶子节点的个数,每个叶子节点输出的score的L2模的平方和。从贝叶斯方差角度考虑,正则项降低了模型的方差,防止模型过拟合.
  6. xgBoosting在每次迭代之后,为叶子结点分配学习速率,降低每棵树的权重,减少每棵树的影响,为后面提供更好的学习空间.
  7. xgBoosting工具支持并行,但并不是tree粒度上的,而是特征粒度,决策树最耗时的步骤是对特征的值排序,xgBoosting在迭代之前,先进行预排序,存为block结构,每次迭代,重复使用该结构,降低了模型的计算;block结构也为模型提供了并行可能,在进行结点的分裂时,计算每个特征的增益,选增益最大的特征进行下一步分裂,那么各个特征的增益可以开多线程进行.
  8. 可并行的近似直方图算法,树结点在进行分裂时,需要计算每个节点的增益,若数据量较大,对所有节点的特征进行排序,遍历的得到最优分割点,这种贪心法异常耗时,这时引进近似直方图算法,用于生成高效的分割点,即用分裂后的某种值减去分裂前的某种值,获得增益,为了限制树的增长,引入阈值,当增益大于阈值时,进行分裂.

缺点

  1. xgBoosting采用预排序,在迭代之前,对结点的特征做预排序,遍历选择最优分割点,数据量大时,贪心法耗时,LightGBM方法采用histogram算法,占用的内存低,数据分割的复杂度更低.
  2. xgBoosting采用level-wise生成决策树,同时分裂同一层的叶子,从而进行多线程优化,不容易过拟合,但很多叶子节点的分裂增益较低,没必要进行跟进一步的分裂,这就带来了不必要的开销;LightGBM采用深度优化,leaf-wise生长策略,每次从当前叶子中选择增益最大的结点进行分裂,循环迭代,但会生长出更深的决策树,产生过拟合,因此引入了一个阈值进行限制,防止过拟合.

应用场景

回归问题和分类问题都可,且能够处理有缺失值的数据.

xgb API

参数

类型

默认值

作用

loss

{‘deviance’, ‘exponential’}

‘deviance’

损失函数

learning_rate

float

0.1

学习率,即每个学习器的权重

n_estimators

int

100

树的棵树

criterion

str

‘friedman_mse’

分裂算法

max_depth

int or None

None

决策树最大深度

n_iter_no_change

int or None

None

早停轮数

tol

float

1e-4

早停阈值

validation_fraction

float

0.1

早停验证比例

min_samples_split

int or float

2

分裂时最小样本数

min_samples_leaf

int or float

1

叶节点最小样本数

min_weight_fraction_leaf

float

0

叶节点最小样本权重总值

max_features

int float str None

‘auto’

切分时最大的特征数量

max_leaf_nodes

int or None

None

最大叶节点个数

min_impurity_decrease

float

0.

切分点不纯度最小减少程度,若节点不纯度小于该值,则被移除

random_state

int or None

None

随机种子

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据降维(四)ISOMAP

    Isomap(Isometric Feature Mapping)是流行学习的一种,用于非线性数据降维,是一种无监督算法.

    JNJYan
  • vim生存指南

    ESC返回至Normal模式 i进入Insert 在Normal活下去 i:进入Insert模式,按ESC返回Normal模式 x:删除当前光标所在的一...

    JNJYan
  • 《Attention Is All You Need》

    本文是对Google2017年发表于NIPS上的论文"Attention is all you need"的阅读笔记.

    JNJYan
  • Qzero算法介绍

    1. AlphaZero算法: 算法的核心是把MCTS算法与深度强化学习(DRL)结合起来(使用MCTS算法作为RL的policy improvement机制)...

    用户1908973
  • 【HBU】数据结构月考2019-11选择题

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。 ...

    韩旭051
  • 「算法与数据结构」从入门到进阶整理推荐书单

    小吴花了几天时间整理了一下学习「数据结构与算法」可以参考的书籍,希望能在学习的道路上帮到你,文末提供收集的PDF版。

    五分钟学算法
  • 书单丨从0起步探秘算法世界 畅享编程之趣

    本书围绕程序设计典型算法,编织了一个扣人心弦又趣味横生的侦探缉凶故事。小说主人公运用高超的搜索技巧和精深的算法知识,最终识破阴谋、缉拿元凶,让你在愉悦的沉浸式体...

    博文视点Broadview
  • 面向基础软件工程师的算法实践与分析

    Google搜索的结果,新浪微博向你展示的话题,淘票票向你推荐的电影,都说明了算法无处不在。而编程从本质上来说就是算法加数据结构 ,算法是编程思想的核心部分,对...

    yuanyi928
  • 【Python环境】数据挖掘有哪些工作流程?

    数据挖掘工作流程: 一、收集数据 收集数据一般是补充外部数据,包括采用爬虫和接口,获取,补充目前数据不足部分。Python scrapy,requests是很好...

    陆勤_数据人网
  • 策略模式

    策略模式Strategy Pattern也称为政策模式Policy Pattern,其定义一系列算法,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法...

    WindrunnerMax

扫码关注云+社区

领取腾讯云代金券