XGBoost简单理解
GBDT与XGBOOST比较
- XGBoost对GBDT的改进1 . 避免过拟合目标函数之外加上了正则化项整体求最优解,用以权衡目标函数的下降和模型的复杂程度,避免过拟合。基学习为CART时,正则化项与树的叶子节点的数量T和叶子节点的值有关。
2 . 二阶的泰勒展开,精度更高不同于传统的GBDT只利用了一阶的导数信息的方式,XGBoost对损失函数做了二阶的泰勒展开,精度更高。 第t次的损失函数:
对上式做二阶泰勒展开( g为一阶导数,h为二阶导数):
3 . 树节点分裂优化选择候选分割点针对GBDT进行了多个优化。正常的树节点分裂时公式如下:
XGBoost树节点分裂时,虽然也是通过计算分裂后的某种值减去分裂前的某种值,从而得到增益。但是相比GBDT,它做了如下改进: - 通过添加阈值gamma进行了剪枝来限制树的生成
- 通过添加系数lambda对叶子节点的值做了平滑,防止过拟合。
- 在寻找最佳分割点时,考虑传统的枚举每个特征的所有可能分割点的贪心法效率太低,XGBoost实现了一种近似的算法,即:根据百分位法列举几个可能成为分割点的候选者,然后从候选者中根据上面求分割点的公式计算找出最佳的分割点。
- 特征列排序后以块的形式存储在内存中,在迭代中可以重复使用;虽然boosting算法迭代必须串行,但是在处理每个特征列时可以做到并行。
参考: http://www.52cs.org/?p=429
https://yxzf.github.io/datamining/
https://blog.****.net/xo3ylaf9kgs/article/details/78787071
https://blog.****.net/chedan541300521/article/details/54655932