Xgboost的特点(与GBDT对比)

Xgboost是在GBDT上进行改进的模型,其主要的特点是做了下面的工作,对了树每次做分裂候选时,是使用的Gain增益,而不是普通的gini指数或者均方差,是一种优化过的误差计算.....:

(1)将树模型的复杂度加入到正则项中,参与到损失函数,来避免过拟合问题。     (叶子打分就是预测值,分类问题是给的概率)

                      

(2)对损失函数进行了优化,优化成了二阶泰勒展开形式,同时使用了一阶导和二阶导,加速了优化速度。【这里只是损失函数优化,使用的损失函数还是自己定的,logloss等损失吧】

(3)相比于GBDT只支持Cart作为基分类器的方式,Xgboost还支持线性分类器,在使用线性分类器时候可以使用L1正则化和L2正则化。【看到objective参数下可选 线性回归、逻辑回归等选项】

(4)引入了特征子采样【就是采样一部分特征作为每棵树的构建】,类似于RF那样,这样可以降低过拟合。

 (5)在寻找最佳分割点时,使用了一种预排序的机制,特征列排序后以块状存储, 对所有特征都按照特征数值进行预排序,在第一次遍历时存起来,之后再遍历分割点时候用O(data)的代价找到特征上的最好分割点【存储的是按特征分割所带来的增益】,这个预先排序的数据,会存储在block结构中,之后的迭代时反复使用这一结构,能够大大减小计算量。 同时这也是实现并行化的重要支持。

 (6)Xgboost可以自动对特征值样本处理,对于有缺失的样本,可以自动找到要分裂的方向 【把缺失值当做一种类型使用】,方法就是将缺失值数据分别分到左子树和右子树中分别计算损失,选择最优的那个,这样在训练时候尝试该怎么分,在测试时直接按照经验最优分即可 【对了,其不支持离散型特征,需要自己做处理,但是lightGBM分箱的机制是支持的】

                                                       

(7)Xgboost支持并行计算,其并行不是模型上的并行,而是特征上的并行【处理单个特征时可以做到】,  将特征列排序后以block形式放到内存中,之后重复使用这一结构。   boosting方法必须串行,但是在处理每个特征列时是可以并行的。   就是每个特征列下候选分割点的Gain增益计算

(8)使用Shrinkage缩减的方法,相对于对学习率的设置,xgboost在进行玩一次迭代后,会将叶子结点的权重乘该系数,主要是削弱每棵树的影响,放置过拟合,实际使用时候,刚开始会设置的大一些,之后迭代次数多了时候会设置小一些。

(9)相比于 ID3使用信息增益、C4.5使用信息增益比、Cart树使用Gini指数、Xgboost主要使用的计算分裂前后的增益使用的是打分函数, 以打分函数计算每个叶子节点做总体误差的贡献,我们需要误差越

                                                                  

小越好,所以每次做叶子分裂时,都是 计算分裂前后根据打分函数得到Gain增益值,Gain值越大,分裂后L减少的越多。   这里有个疑问,每棵树叶子节点计算残差时还和之前一样吗,应该不是一样的,应该是一种结合到原目标函数、  后面的拉姆塔是结构代价

                                             

(10)Xgboost并不是完全的贪心寻找最佳分割点的方法,而是使用了一种近似的方法,其思想是根据百分位法列举几个可能成为分割点的候选者,在候选者基础上找到最佳的分割点,提升效率。

(11)支持自定义loss 损失函数【注意,是loss,是目标函数中的L部分】,只要能够一阶和二阶泰勒展开即可。             另外在打分函数推导推导时的w是最优化求出来的,而不是平均值或者规则

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值