xgboost目标函数
首先我们知道xgboost支持自定义目标函数,参见:
但是其要求目标函数必须二阶可导,我们必须显式给出梯度(可理解为一阶导)和hess阵(可理解为二阶导),但是MAE不可导。具体xgboost的原理的我们可以参见陈天奇的PPT或者此博客:
使用可导目标函数逼近MAE
如上图所示,xgboost自带的平方损失,与MAE相距较远。比较接近的损失有Huber Loss 以及 Fair Loss。具体可参考:
- kaggle 讨论:https://www.kaggle.com/c/allstate-claims-severity/discussion/24520
- overflow:https://stackoverflow.com/questions/45006341/xgboost-how-to-use-mae-as-objective-function
自定义近似MAE导数
我们不必要限制在寻找逼近MAE损失函数,然后再使用逼近的导数这样的过程。我们可以直接构造MAE的导数。当然这个构造过程可能没有太多的理论支持,但是它的确work。参见: