您的位置:首页 > 其它

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

2018-01-30 16:21 2011 查看

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相距较远。比较接近的损失有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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息