XGBoost(eXtreme Gradient Boosting)是GBDT方法的一种高效、灵活、便携的工程化实现。
注意,XGBoost不是一种算法的名称,而是同属于GBDT框架下,一种Boosting的思想。另外,随着代码版本的迭代,很多新特性也被借鉴进来,比如LightGBM中的直方图方法,在2017年就被加入到了XGBoost中。
相比传统的GBDT实现,XGBoost(以版本1.4.2为例)区别有以下几点:
1、XGBoost损失函数使用二阶泰勒展开作为近似。
2、支持自定义损失函数,需要函数一阶和二阶可导。
3、加入了更多的正则项,比如除了叶子节点权重的 L2 范式,还有树的叶子节点个数。
4、缺失值处理。
5、列抽样。
6、更多的树方法(Tree Method),传统的GBDT在选择树的分割点时,通常是遍历每个特征的每种取值,XGBoost支持更多的树方法,除了传统GBDT的精确(exact)方法,还增加了近似(approx)和直方图(hist)方法。
下面详细说说这些区别。
缺失值处理
在scikit-learn 0.24.2本身实现的GBDT,如果特征存在缺失值,模型训练时会报错。