首页 > 编程知识 正文

boosting算法原理,xgboost算法可以用来干嘛

时间:2023-05-04 11:28:37 阅读:32105 作者:653

XG boost算法原理1.XG boost介绍XG boost的全名(extreme gradient boosting )极限梯度上升,在一些比赛中经常使用,其效果明显。 是一款大规模并行boosted tree的工具,是目前最快、最好的开源boosted tree工具包。 xgboost应用的算法是对梯度引导诊断树(gbdt )的改进,可以用于分类,也可以用于回归问题。

2 .回归树和决策树的区别事实上,分类和回归是一种。 但是,分类的结果是离散值,回归是连续值,本质相同,都是特征到label的映射。 决策树利用信息增益、信息增益、基尼系数判断树节点的分类点,而回归树采用预测误差、均方误差、对数误差等新方式。 而且节点不再是类别,而是数值。 那么,如何确定节点的值呢? 一些节点内部样本的平均值是通过优化计算的,如xgboost。

3.boosting集成学习boosting集成学习。 多个相关决策树联合进行决策。 什么是关联? 举个例子,一个样本为[ (2,4,5 ) ],第一个决策树在该样本中训练得到的预测值为3.3,第二个决策树训练时的输入为[ ) 2,4,5 ]

相比之下,在随机森林中,各决策树是独立的,各决策树从样本堆中随机选取一个样本,随机选取一个特征独立进行训练,各决策树之间关系不大。

所以xgboost首先是boosting的集成学习,这应该非常容易理解

此时,您可能会发现回归树形成的关键点:1)分裂点由什么分隔)如上所述,均方误差最小,loss。 2 )分类节点的预测值是多少)如上所述,一个是将叶节点处各样本的实际值的平均值作为叶节点的预测值,或者计算得到) )。

4 .在学习整合学习XG boost之前,需要了解整合思想。 综合学习方法是指将多种学习模式结合起来取得最好的效果,使组合的模式具有更强的泛化能力。 另外,xgboost用分类回归树(cart树)组合。 因此,在此之前,让我们先看看cart树。 输入用户的年龄、性别,判断用户是否喜欢游戏的得分。 由此,得到的cart树的模型如下。

研究表明,对单个决策树模型容易拟合,不能有效应用。 所以综合学习出现了。 如下图所示,用两棵树的组合进行游戏得分值的预测。 其中,tree1连队男子预测值为2,tree2男子预测值为0.9。 这个男孩最后的得分值是2.9

以上综合学习推广到一般情况,其预测模型为:

yi=f1f2f3…fi(I表示树的总数,fi表示第I棵树,yi表示样本的预测结果)

损失函数为; obj=L(y ) 0,y0 ) l ) y ) 1,y1 )…L ) y ) n,yn )正则(y )0)正则(y )1)…正则(y ) n ) ) ) ) 65 )

5.xgboost算法的设想首先要明确我们的目标,建立k个回归树,使树群的预测值尽可能接近真实值,并且尽可能有泛化能力。 从数学的角度看这是泛函优化,是多目标,看目标函数:

损耗函数越小越好,模型精度高的正则是表示树复杂度的函数,越小复杂度越低,模型泛化能力高的直观要求目标尽量减小预测误差,尽量减少叶节点,尽量不使节点数值极端

那么如何实现上述目标呢? 先说答案,就是贪婪算法的优化(二次优化)

一般来说,贪婪策略是指:决策树基于当前目标进行优化决策,即眼前利益最大化决策。 如何使用贪婪的战略? 存在放置在第一个节点上的一组示例。 此时T=1。 这里的l(w-yi误差表示平方误差时,上述函数求出w的二次函数的最小值。 取最小值的点是此节点的预测值,最小的函数值是最小损失函数。

如果损失函数不是二次函数该怎么办? 啊,ysdbg展开,非二次近似是二次。

然后,要将哪些feature分为两个节点并使其成为弱树苗,需要确定1 )分裂用的feature,how? 最简单粗暴的是枚举,loss function如何建立选择最有效特征的2 )节点的w

那么选择一个feature分裂,计算loss function最小值,然后选择另一个feature分裂,得到一个loss function最小值。 枚举结束后,找效果最好的东西,分裂树,就能得到小树苗。 分裂时,每次分裂节点时,可以注意到loss function仅受此节点的示例的影响。 因此,每次分裂时,计算分类增益(丢失函数的下降量)只需要关注要分裂的节点的采样。

接下来,继续分裂,如上所述,形成一棵树,再形成一棵树,每次根据上次的预测取最优再分裂/树是贪婪的策略吗?

这种循环反复的方式一定有停止条件,什么时候停止?

1 )如果引入的列的增益小于一个阈值,那么我们可以截断这个分裂,这并不是每次分裂时loss function都增加,而是预测剪枝的意义,并且阈值参数预测y正则项中叶节点树t的阈值

2)当数达到最大深度的时候,则停止建立决策树,设置一个超参数max_depth ,树太深容易过拟合

当样本权重和小于设定阈值时,则停止建树,即超参数 min_child_weight, 大概意思是 一个叶子节点的样本太少,则终止同样是防止过拟合

那么节点分裂的时候是按照什么顺序来的,比如第一次分裂后有连个叶子节点,先分裂哪个?答:同一层级的(多级)并行,确定如何分裂或者不分裂成为叶子节点

xgboost算法是加法模型:每次往模型中加入一棵树,其损失函数便会发生变化。另外在加入第t棵树时,则前面第t-1棵树已经训练完成,此时前面t-1 棵树的正则项和训练误差都已成为常数项。对于每棵树的正则部分,我们将在后面细说。

6.总结

1)决策树叶子节点的预测值w是最优化求出来的,不是啥平均值或者规则指定的,这算是一个思路上的创新吧

2)正则化时防止过拟合的技术

3)支持自定义损失函数,只要能够进行ysdbg展开(能求一阶导数和二阶导数)就行

4)支持并行化,这是xgboost的闪光点,boosting技术中下一颗树依赖上一颗树的训练和预测,所以树与树之间只能串行!但是,在选择最佳分裂点时,进行枚举的时候可以并行(据说这个时候也是树形成最耗时的阶段),即同级节点可并行

5)对连续值特征的分裂点的选择:当feature是离散值时分割点倒是很简单,比如“是否单身”来分裂节点计算增益很easy,但是月收入这种feature,取值很多,从5k-50k都有,总不可能每个分割点都试一下计算分裂增益吧?一是计算量,二是:出现叶子节点过少,过拟合。我们的常用习惯是划分区间(分桶),那么如何分桶呢?可以时等频分桶(每个桶内的样本数大致相同),也可以是等宽分桶(每个桶内的特征值相同),作者使用的是等频分桶,即共划分m个桶,每个桶内的样本树是:总样本树/m。

6)对缺失值的处理,当样本的第i个特征缺失时,无法利用该特征对样本进行划分,这里的做法是将该样本默认划分到指定的子节点,至于具体划分到哪个节点需要某算法来计算

算法的主要思想是,分别假设特征的缺失样本属于右子树和左子树,并且只在不缺失的样本上迭代,分别计算缺失样本属于右子树和左子树的增益,选择增益最大的方向为缺失数据的默认方向

7)可实现后剪枝

8)交叉验证,方便选择最好的参数,如果比发现30棵树预测已经很好了,不用进一步学习残差了,那么停止建树

9)行采样和列采样,随机森林的套路(防止过拟合)

10)shrinkage,你可以是几个回归树的叶子节点之和为预测值,也可以是加权值,比如第一棵树的预测值是3.3,label为4.0,第二棵树才学0.7 。。。再后面的树还学个鬼,所以给他打个折扣,比如3折,那么第二颗树训练的残差为4.0-3.3*0.3=3.01,作用是防止过拟合,有点像梯度下降中的学习率

11)该支持设置样本的权重,这个权重体现在梯度g和二阶梯度h上

12)跟深度学习对比下:

xgboost的第一感觉就是防止过拟合+各种支持分布式/并行,所以一般传言这种大杀器效果好(集成学习的高配)+训练效率高(分布式),与深度学习相比,对样本量和特征数据类型要求没那么苛刻,适用范围广。

深度神经网络通过对时空位置建模,能够很好的捕获图形、语音、文本等高维数据。而基于树模型的香港boost则能够很好地处理表格数据,同时还拥有一些深度神经网络所没有的特性(如:模型的可解释性、输入数据的不变性、更易于调参等)。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。