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。參見: