XGB算法梳理

本文详细介绍了XGBoost算法,包括其基于梯度提升的原理、损失函数(如MSE和对数损失)、正则化、分裂点选择算法、缺失值处理策略以及优缺点。XGBoost支持并行处理,适用于分类和回归问题,参数如学习率、n_estimators、min_child_weight等可通过调参优化。

1、算法原理

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

2、损失函数

    回归问题常用损失函数损失函数是MSE:

    

   分类问题常用的损失函数是对数损失函数:

   XGBoost目标函数定义为:

 目标函数由两部分构成,第一部分用来衡量预测分数和真实分数的差距,另一部分则是正则化项。正则化项同样包含两部分,T表示叶子结点的个数,w表示叶子节点的分数。γ可以控制叶子结点的个数,λ可以控制叶子节点的分数不会过大,防止过拟合。

3、分裂点算法

3.1 Exact Greedy Algorithm for Split Finding 是一种利用穷举法选择最佳的分裂节点

3.2 Approximate Algorithm for Split Finding 通过加权分位数方法近似选择最佳的分裂节点

3.3 Sparsity-aware Split Finding 针对稀疏特征的分裂点选择法

4、正则化

     公式:

     注意:这里出现了γ和λ,这是xgboost自己定义的,在使用xgboost时,你可以设定它们的值,显然,γ越大,表示越希望获得结构简单的树,因为此时对较多叶子节点的树的惩罚越大。λ越大也是越希望获得结构简单的树。

5、对缺失值处理

       关于缺失值的处理将其看与稀疏矩阵的处理看作一样。在寻找split point的时候,不会对该特征为missing的样本进行遍历统计,只对该列特征值为non-missing的样本上对应的特征值进行遍历,通过这个技巧来减少了为稀疏离散特征寻找split point的时间开销。在逻辑实现上,为了保证完备性,会分别处理将missing该特征值的样本分配到左叶子结点和右叶子结点的两种情形,计算增益后选择增益大的方向进行分裂即可。可以为缺失值或者指定的值指定分支的默认方向,这能大大提升算法的效率。如果在训练中没有缺失值而在预测中出现缺失,那么会自动将缺失值的划分方向放到右子树。

6、优缺点

      优点:

      (1) 损失函数是用泰勒展开式展开的,同时用到了一阶导和二阶导,可以加快优化速度。

      (2) 在寻找最佳分割点时,考虑到传统的贪心算法效率较低,实现了一种近似贪心算法,用来加速和减小内存消耗,除此之外还考虑了稀疏数据集和缺失值的处理,对于特征的值有缺失的样本,XGBoost依然能自动找到其要分裂的方向。

      (3)XGBoost支持并行处理,XGBoost的并行不是在模型上的并行,而是在特征上的并行,将特征列排序后以block的形式存储在内存中,在后面的迭代中重复使用这个结构。这个block也使得并行化成为了可能,其次在进行节点分裂时,计算每个特征的增益,最终选择增益最大的那个特征去做分割,那么各个特征的增益计算就可以开多线程进行。

      缺点:

      (1)分裂计算量太大

      (2)分割后的叶子节点样本过少,容易过拟合

7、应用场景

     分类、回归问题

8、sklearn参数

learning_rate:学习率,控制每次迭代更新权重时的步长。值越小,训练的越慢。取值范围:[0,1]。典型值为0.01~0.2

n_estimators:估计器的数量

min_child_weight:

拆分节点权重和阈值

如果节点的样本权重和小于该阈值,就不再进行拆分。在线性回归模型中,这个是指建立每个模型所需要的最小样本数。

值越大,算法越保守。取值范围为:[0,∞]

用于防止过拟合问题:较大的值能防止过拟合,过大的值会导致欠拟合问题

需要通过CV调参

 max_depth:每个基本学习器树的最大深度,用于防止过拟合问题。通过CV调参。典型值:3~10

gamma:损失阈值,在树的一个叶节点上进一步分裂所需的最小损失减少量,gamma值越大,算法越保守。取值范围为:[0,∞]

subsample:

随机选取一定比例的样本来训练树。设置为0.5,则意味着XGBoost将从整个样本集合中随机的抽取出50%子样本建立树模型,这能够防止过拟合。

取值范围为:(0,1]。减小这个参数的值,算法会更加保守,避免过拟合。但是,如果这个值设置得过小,它可能会导致欠拟合。 典型值:0.5-1

colsample_bytree:指的是每棵树随机选取的特征的比例,取值范围(0,1]。

reg_alpha,reg_lambda:正则化项,防止过拟合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值