机器学习算法梳理第三篇--XGB

本文详细介绍了XGBoost算法的原理,包括损失函数、分裂节点算法、正则化、缺失值处理,以及优缺点。XGBoost通过优化损失函数和正则化,解决了GBDT在大数据集上的计算瓶颈。此外,文章还探讨了XGBoost如何处理缺失值,并分析了其应用场景及参数设置。
摘要由CSDN通过智能技术生成

目录

 

一. 算法原理

二. 分裂节点算法

三. 正则化

四. 对缺失值处理

五. 优缺点

六. 应用场景

七. sklearn参数


一. 算法原理

在数据建模中,当我们有数个连续值特征时,Boosting分类器是最常用的非线性分类器方法将成百上千个准确率较低的模型组合起来,成为一个准确率较高的模型,这个模型会不断的迭代,每次迭代就会产生一颗新的树,然而当数据集比较大比较复杂的时候,我们可能需要几千次的迭代这样造成巨大的计算瓶颈,xgboost正是为了解决这个瓶颈问题而提出的,单机它采用多线程来加速树的构建过程。在学习xgboost之前必须要熟悉gbdt,gbdt就是boosting方法和cart回归树,通过拟合上一个模型的残差进行学习。

Xgboost相比于GBDT来说,更加有效应用了数值优化,最重要是使损失函数(预测值和真实值的误差)变得更复杂。目标函数依然是所有树的预测值相加等于预测值。

损失函数如下,引入了一阶导数,二阶导数。:   

                                     

       好的模型需要具备两个基本要素:一是要有好的精度(即好的拟合程度),二是模型要尽可能的简单(复杂的模型容易出现过拟合,并且更加不稳定)因此,我们构建的目标函数右边第一项是模型的误差项,第二项是正则化项(也就是模型复杂度的惩罚项)

                                      

                    每一次迭代,都在现有树的基础上,增加一棵树去拟合前面树的预测结果与真实值之间的残差

                                   

                                      目标函数如上图,最后一行画圈部分实际上就是预测值和真实值之间的残差

先对训练误差进行展开:

                               

                      xgboost则对代价函数进行了二阶泰勒展开,同时用到了残差平方和的一阶和二阶导数 

 

再研究目标函数中的正则项:

                              

在这种新的定义下,我们可以把目标函数进行上述改写,其中I被定义为每个叶子上面样本集合Ij = {i|q(xi)=j},g是一阶导数,h是二阶导数。

树的复杂度可以用树的分支数目来衡量,树的分支我们可以用叶子结点的数量来表示

那么树的复杂度式子:右边第一项是叶子结点的数量T,第二项是树的叶子结点权重w的l2正则化,正则化是为了防止叶子结点过多

此时,每一次迭代,相当于在原有模型中增加一棵树,目标函数中,我们用wq(x)表示一棵树,包括了树的结构以及叶子结点的权重,w表示权重(反映预测的概率),q表示样本所在的索引号(反映树的结构)

将最终得到的目标函数对参数w求导,并令导数为0,并将w*带回目标函数,可知目标函数值由红色方框部分决定:

                                

二. 分裂节点算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值