问题1:集成学习
xgboost和gbdt区别?xgboost中防止过拟合?bagging和boosting区别?
1. boosting
主要关注于降低偏差。
2. BDT提升树
通过多个特征生成多个树,来决策一件事情。每一颗树学的是之前所有树决策的残差。
3. GBDT(回归树)
下一轮迭代目标值是上一轮的残差,将没棵树的预测值加起来就是模型最终的预测结果。(使用损失函数的负梯度在当前模型的值作为回归提升树种的残差近似值)
4. Adaboost
改变训练样本的权重来学习多个若分类器并进行线性组合的过程。
(1.如何改变训练样本权重。2.如何组合多个若分类器)二分类算法
5. XGBoost(极端梯度提升树)
所有若分类器上的叶子权重直接求和。
GBDT和XGBT的区别:对于GBDT而言,每个样本的预测结果等于所有树上结果的加权求和;XGBT是每个叶子节点上的叶子权重直接求和。后者是对前者的改进,都是基于CART的二叉树。损失函数不同:GBDT用近似梯度下降法。损失函数的负梯度在当前模型的值作为回归提升树的残差近似值。XGBT用传统损失函数+模型复杂度,将模型复杂度考虑在内,采用正则化防止过拟合。GBDT用一阶导数,XGBT用到二阶导数,其一是为了凑泰勒公式,其二为了更加准确的逼近真实损失。
6. LightGBM与之又有什么区别?:(轻量级梯度提升机)
XGBT的复杂度 = 特征数量 * 特征分裂点数量 * 样本数量(优化目标)
- Histogram算法:减少特征分裂点数量,高效寻找特征分裂点。
- GOSS算法:减少样本数量。
- EFB算法(互斥特征捆绑算法):特征数量优化。
- leaf-wise:最大效益进行分裂。
7. LGB相比于XGBT优点有哪些?
-
更快的训练速度和更高的效率: LGB采用基于直方图的算法,将连续特征通过分箱进行离散化。节点分裂方式不同于XGBT,XGBT是整层全部分裂,而LGB避免了整层全部分裂,按增益最大的节点深入分裂。
-
更低的内存占用率:离散化。
-
更高的准确率:用leaf-wise分裂方法代替level-wise分裂方法。
-
支持并行学习