为啥Xgboost比GradientBoost好那么多?

  统计/机器学习 监督式学习 开放问题
12

我之前是用的GradientBoost模型,做了特征工程,又选了参数,roc auc才达到0.75的水平。我现在换成最近超级火的XGBoost,什么都没做,roc auc直接飙到了0.82!为什么它比GradientBoost好那么多?

 

红魔鲁尼   2017-03-12 14:00



   4个回答 
13

(1)增加了正则项,树越复杂,惩罚越大,这防止了over-fitting,而GradientBoosting并没有惩罚项。

(2)在迭代更新的时候,Xgboost采用了二阶导数(海瑟矩阵),而GradientBoosting只是用了一阶导数(梯度)。

此外,xgboost跑起来也更快,因为采用了并行计算、块处理、稀疏矩阵处理技术等等。

高代兄   2017-03-14 07:36

海瑟矩阵是什么? - MeganC   2017-03-14 09:24
海瑟矩阵在这里了。。。http://sofasofa.24xi.org/forum_main_post.php?postid=1000453 - MeganC   2017-04-11 11:24
9

xgboost是从决策树一步步发展而来的。


决策树 $\longrightarrow$ 对样本重抽样,然后多个树平均 $\longrightarrow$ Tree bagging


Tree bagging $\longrightarrow$ 再同时对特征进行随机挑选 $\longrightarrow$ 随机森林


随机森林 $\longrightarrow$ 对随机森林中的树进行加权平均,而非简单平均$\longrightarrow$ Boosing (Adaboost, GradientBoost)


boosting $\longrightarrow$ 对boosting中的树进行正则化 $\longrightarrow$ xgboosting


从这条线一路发展,就能看出为什么xgboost的优势了。


Nagozi   2017-05-18 20:35

5

因为xgboost针对regression tree采用了dropout regularization。(详情见该论文

数据痴汉   2017-04-11 11:27

4

1.损失函数是用泰勒展式二项逼近,也就是海森矩阵,而不是像gbdt里的就是一阶导数


2.对树的结构进行了正则化约束(regularization),防止模型过度复杂,降低了过拟合的可能性


3.节点分裂的方式不同,gbdt是用的gini系数,xgboost是经过优化推导后的


4.优化了计算过程,缩短了运行时间


五道口少年   2017-10-18 21:26



相关问题

为什么lightgbm比xgb快?   1回答

stack多个xgboost效果并不理想   2回答

xgboost是怎么做到regularization的?   2回答

既然xgboost那么好,线性回归还有存在的价值吗?   4回答

xgboost中的参数min_child_weight是什么意思?   1回答

xgboost怎么调参?   6回答

xgboost可以做回归预测吗?   2回答

XGBClassifier设置random_state报错   1回答

xgboost中的决策树的复杂度是怎么定义的?   1回答

如何理解xgboost與cart節點分數?   1回答

xgboost可以用sklearn里的GridSearchCV吗?   2回答

对于xgboost,还有必要做很多特征工程吗?   4回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!