page contents

XGBOOST和GBDT的区别在哪里?

轩辕小不懂 发布于 2021-09-19 09:51
阅读 571
收藏 0
分类:资源下载
1983
Nen
Nen
- 程序员

传统的GBDT是以CART树作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题),线性分类器的速度是比较快的,这时候xgboost的速度优势就体现了出来。

传统的GBDT在优化时只使用一阶导数,而xgboost对损失函数做了二阶泰勒展开,同时用到了一阶和二阶导数,并且xgboost支持使用自定义损失函数,只要损失函数可一阶,二阶求导。

xgboost在损失函数里加入了正则项,用来减小模型的方差,防止过拟合,正则项里包含了树的叶节点的个数, 每个叶子节点上输出的score的L2模的平方和。

 xgboost里有一个参数叫学习速率(learning_rate),xgboost在进行完一次迭代后,会将叶子节点的权重乘上学习速率,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把learing_rate设置得小一点,然后迭代次数(n_estimators)设置得大一点。

xgboost借鉴了随机森林的原理,支持行抽样(subsample)和列抽样(colsample_bytree,colsample_bylevel), 行抽样指的是随机森林里对数据集进行有放回抽样,列抽样指的是对特征进行随机选择,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。

请先 登录 后评论