XGBoost:
目标函数=损失函数(拟合数据) + 正则化项(惩罚复杂模型)
误差函数尽量拟合训练数据,正则化项鼓励简单的模型
作用:用于控制树的复杂度,防止过拟合,使得模型更简化,也使得最终的模型的预测结果更稳定
目标函数:
对目标函数改进,进行二阶泰勒展开
分别定义gi和和hi为一阶导数和二阶导数
带入目标函数得:
继续推导
令Gj和Hj分别表示每个叶子节点的一阶梯度的和,与二阶梯度的和,如下
目标函数改写为:
我们希望这个值越小越好,那对w求偏导令偏导等于0:
求解得:
具体推导过程可参考:https://zhuanlan.zhihu.com/p/83901304
特点:
- XGBoost将树模型的复杂度加入到正则项中,从而避免过拟合,泛化性能好
- 损失函数是用泰勒展开式展开的,用到了一阶导和二阶导,可以加快优化速度
- 在寻找最佳分割点时,采用近似贪心算法,用来加速计算
- 不仅支持CART作为基分类器,还支持线性分类器,在使用线性分类器的时候可以使用L1,L2正则化
- 支持并行计算,XGBoost的并行是基于特征计算的并行,将特征列排序后以block的形式存储在内存中,在后面的迭代中重复使用这个结构。在进行节点分裂时,计算每个特征的增益,选择增益最大的特征作为分割节点,各个特征的增益计算可以使用多线程并行
- 优点:速度快、效果好、能处理大规模数据、支持自定义损失函数等
- 缺点:算法参数过多,调参复杂,不适合处理超高维特征数据