1 mae/mad和mse介紹
Mse:mean-square error。
可導,常常作爲loss function。
Mae:mean absolute error
不可導。
2 如何在XGBoost中近似mae
我們都知道XGBoost支持我們自定義目標函數,但是其在實現中對目標函數做了二階泰勒展開,所以我們需要提供目標函數的一階和二階導數。但是MAE並不是連續可導的(在0處不可導),無法直接作爲XGBoost的目標函數。所以目前比較好的方法是找到一個函數來近似它。
2.1 Huber loss
在統計學當中,huber loss是魯棒迴歸(robust regression)的損失函數,相比於平方損失更不容易受異常點的影響。有一些分類任務有時也會使用。 —Wikipedia
這個函數對
在XGBoost的python可以如下實現:
def huber_approx_obj(preds, dtrain):
d = dtrain.get_labels() - preds #remove .get_labels() for sklearn
h = 1 #h is delta
scale = 1 + (d / h) ** 2
scale_sqrt = np.sqrt(scale)
grad = d / scale_sqrt
hess = 1 / scale / scale_sqrt
return grad, hess
2.2 Fair loss
在XGBoost的python實現如下:
def fair_obj(preds, dtrain):
"""y = c * abs(x) - c * np.log(abs(abs(x) + c))"""
x = dtrain.get_labels() - preds
c = 1
den = abs(x) + c
grad = c*x / den
hess = c*c / den ** 2
return grad, hess
2.3 Log-Cosh loss
在XGBoost中的python實現如下:
def log_cosh_obj(preds, dtrain):
x = dtrain.get_labels() - preds
grad = np.tanh(x)
hess = 1 / np.cosh(x)**2
return grad, hess
2.4 對比
動態圖對比了
3 理論分析
@ To do