xgboost 使用 MAE或MAPE 作为目标函数

xgboost目标函数

首先我们知道xgboost支持自定义目标函数,参见:

  • https://github.com/dmlc/xgboost/blob/master/demo/guide-python/custom_objective.py

但是其要求目标函数必须二阶可导,我们必须显式给出梯度(可理解为一阶导)和hess阵(可理解为二阶导),但是MAE不可导。具体xgboost的原理的我们可以参见陈天奇的PPT或者此博客:

  • http://blog.csdn.net/sb19931201/article/details/52557382

使用可导目标函数逼近MAE

xgboost 使用 MAE或MAPE 作为目标函数_第1张图片
如上图所示,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。参见:

  • kaggle 讨论:https://www.kaggle.com/c/web-traffic-time-series-forecasting/discussion/39395

你可能感兴趣的:(python库,机器学习)