原理推导:

xgboost常见面试题
1.Boosting的思想
(直接讲adaboost)初始化训练一个弱学习器,每次依照训练结果调整样本权重,增大错分样本的权重并基于此训练下一个学习器,预测时串联各学习器的加权结果。
2.XGBoost和GBDT的区别:
-
损失函数上:对于Loss部分是一阶还是二阶展开(二阶更准确)
-
正则项上:XGBoost加上树模型复杂度的正则项
-
特征选择上:
-
加入近似算法(不是遍历所有可能取值,而是有间隔的选取候选拆分点/分桶),默认tree_method = “auto”将在中小数据上沿用贪心算法,大数据集上使用近似算法。
-
XGBoost引入随机森林在特征集合抽样的思想,帮助降低过拟合
-
-
基学习器上:gbdt 只能用cart算法的回归树,而xgboost 支持线性分类器 gblinear。
-
缺失值处理上:XGBoost在训练时缺失值会被分到左子树和右子树,分别计算目标函数,对比选择较优的分配方式。
-
计算速度上——pre_sorted预排序、分箱的近似算法、分布式计算等
3.XGBoost 计算速度上的提升点
-
决策树最耗时的步骤是对特征的值排序,XGBoost在迭代之前,先进行预排序,存为block结构,每次迭代重复使用该结构,降低计算,同时各个特征的增益计算可以开多线程进行
(这里也有一个考点,xgb 的并行和Rf不同,是在选择分割方式时,并行计算各个特征的最佳分割点,而不是并行构造tree,所有 boosting 算法都是additive training 无法并行构造tree)
-
分箱 / 近似直方图算法,不是遍历所有可能取值,而是有间隔的选取候选拆分点/分桶,比如连续值直接取分位数。(LightGBM方法采用histogram算法,复杂度更低)
4.目标函数 MAE 二阶不可导问题
有绝对值的目标函数 MAE MAPE 二阶不可导,主流方法是用利用可导函数逼近,比如MSE或者Pseudo-Huber loss function:
5.XGBoost 如何调参?
- 确定 eta(学习率)和 n_estimators(迭代次数=树的个数)
- 再确定每棵树的基本信息,max_depth 和 min_child_weight(即节点大H值)
- 再确定全局信息:比如最小分裂增益,采样参数(样本采样 subsample、特征采样colsample_bytree),正则参数(L1-alpha和L2-lambda)
- 重新降低 eta(学习率),得到最优解
6.XGBoost 过拟合怎么办?
-
对树的剪枝:
- 降低树的深度 max_depth
- 增大 min_child_weight(即节点大H值)
- 增大惩罚系数alpha和lambda
-
subsample 力度变大,降低异常点影响
-
减小 learning rate,提高 n_estimators