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
相关文章推荐
- ibatis使用HashMap作为返回结果时DB2,ORACLE,MYSQL对KEY大小写不同
- 配置Spring+hibernate使用ehcache作为second-level cache
- Android中使用系统桌面背景作为应用背景,支持拖动
- mysql 5.x使用utf8作为默认字符集
- 结构变量作为方法的参数调用,在方法内部使用的“坑”你遇到过吗?
- 使用StringTemplate作为ViewEngine的ASP.Net的MVC(二)
- Kotlin语言学习之将函数作为参数传递,使用双冒号::引用其他方法
- Spring MVC使用POJO以及servlet原生api作为参数
- Windows下使用Beyond Compare作为git的比对与合并工具
- iOS开发:Block作为参数使用(常见于各框架)
- Eclipse使用BlueStacks作为android模拟器
- 在VS项目中使用SVN版本号作为编译版本号
- 使用QtDBus作为Qt的进程通信(2)
- PHP_使用图片作为输入界面
- C++ 工程实践(5):避免使用虚函数作为库的接口
- 在模板类中使用字符串作为无类型模板参数
- Android中使用系统桌面背景作为应用背景,支持拖动
- DotNetBar.Bar作为容器使用的方法及Text更新原理
- 使用环回地址(127.0.0.1)作为apache监听地址的好处
- 切勿使用:指向局部变量的指针作为函数的返回指针!