机器学习中GBDT和XGBOOST的区别

举报
华为云社区精选 发表于 2018/04/23 17:04:30 2018/04/23
【摘要】 这里默认是想做分类任务,由于GBDT分2种,一种是sklean中的AdaptiveBoostingClassifer,一种是skleran中的GradientBoostingClassifier,所以这里分别来对待。Base learner在AdaBoost中,base learner是classfication tree,即f(x) = 1 or -1,使用gini作为base learn...

这里默认是想做分类任务,由于GBDT分2种,一种是sklean中的AdaptiveBoostingClassifer,一种是skleran中的GradientBoostingClassifier,所以这里分别来对待。

  • Base learner

在AdaBoost中,base learner是classfication tree,即f(x) = 1 or -1,使用gini作为base learner的cost function

在GBDT中,base learner是regression tree,使用square loss作为cost function,f(x)为一个score,可以为-0.3,可以为0.2,可以为1

在XGBoost中,base learner是regression tree,f(x)为一个score,可以为-0.3,可以为0.2,可以为1

  • 损失函数

在AdaBoost中,使用exp loss

在GBDT中,使用(待补充,我记得也是log loss)

在XGBoost中,主要使用log loss

spacer.gifspacer.gifimage.png


GBDT和XGBoost类似,但没有2

  • 泰勒展开及优化

AdaBoost在进行泰勒展开时只展开到一阶,由于base learner f(x)取值被限定为1 或者 -1,所以,不用对f(x)在进行正则化。

GBDT也展开到了一阶,但由于f(x)理论上可以取到正无穷大到负无穷大,所以原始目标的一个naive solution是f(x) = 正无穷大 or 负无穷大。这样做首先显然错的,其次,也违背了泰勒展开时,默认f(x)很小的约束,因此,对原始目标优化时需要对每个f(x)后面加一个正则项,优化目标变为原始目标 + 正则项,这样做的结果是,等同于regression tree对neg gradient以square loss为metric做regression,GBDT的的loss function是log loss,但每棵regression tree的loss function是squre loss

(详情见林轩田的机器学习技法的Gradient Boosting Decision Tree章节)

XGBoost,由于常用的函数,比如log loss,比如square loss,二阶求导后的结果都是正值,即h为正值,(这点很重要,论文中没有提及,但陈天奇在一个tutorial pdf中提及了),所以,XGBoost进行了二阶展开后可以避免naive solution,而且,非常巧地可以通过解一元二次方程把f(x)求出来

其实二阶求导也不是什么新鲜东西,Friedman的logit boost还是哪篇文章中也有提及。

  • 模型复杂度

XGBoost引入了多种方式防止过拟合、

  • 关于shrinkage

这点其实很有意思,对于XGboost和GBDT,shrinkage的作用是,找到一个“best direction”后,沿着它走“一小步”

对于AdaBoost,找到了一个“best direction”后,沿着它走"maximum step size”

  • 其他

XGBoost确实引入多有意思的东西,比如parallization, column block,sampling, dart等,但这些东西,GBDT理论上也可以完美地引入,就不细说了


作者|薄新强

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。