xgboost 是gbdt的具体实现方案之一
1.gbdt的损失函数:
1.1 回归损失函数: 均方损失函数、绝对值损失函数、huber损失函数(是均方损失函数 和 绝对值损失函数的折中)、分位数损失函数
1.2 分类损失函数:对数损失函数、指数损失函数
指数损失函数又分:二元分类和 多元分类
2.gbdt的正则化:
2.1 学习率,learning rate 在0到1之间
2.2 采样比例:subsample 取值范围是(0,1], 采样是无放回的采样,一般取值(0.5,0.8).子采样是为了减少过拟合,但是子采样会带来偏差。
2.3 cart 树剪纸。
3. xgboost 比gbdt 的优势
3.1. 算法本身的优化:gbdt基模型是 CART决策树,xgboost 除了支持CART树之外,还支持线性分类器,可以使用L1和L2配合使用
gbdt损失函数只对误差部分做了负梯度一阶导数展开,而xgboost 的损失函数增加了二阶导数,泰勒级数展开,这样更加准确。
用用二阶导数的原因有2个:(1)可以加快收敛 (2)更加准确
3.2.健壮性的优化:对缺失值的处理,gbdt没有对缺失值做处理?xgboost 对缺失值,自动学习出缺失值的处理策略。
3.3.效率的优化:xgboost支持并行处理,这个并行不是在模型上的,而是在特征的并行上。
3.3.1:将特征排序后以block分组的形式存储在内存中,后面的排序会重复使用这个结构,这使得特征并行化成为了可能。
3.3.2:节点分裂的时候,计算每个特征的增益,最终分裂的时候选择增益最大的特征去做分裂。在 计算特征增益的时候,用贪心算法枚举所有的分裂点,会有并行计算。
3.4 最佳特征选取策略不同。GBDT遍历所有特征,XGBoost引入类似于RandomForest的列(特征)子采样,有利于防止过拟合与加速运算