损失函数
回归损失函数
L1、L2损失函数
均方误差(L2)
平均绝对值误差(也称L1损失)
MSE对误差取了平方(令e=真实值-预测值),因此若e>1,则MSE会进一步增大误差。如果数据中存在异常点,那么e值就会很大,而e²则会远大于|e|。
如果训练数据被异常点所污染,那么MAE损失就更好用(比如,在训练数据中存在大量错误的反例和正例标记,但是在测试集中没有这个问题)。
如果异常点代表在商业中很重要的异常情况,并且需要被检测出来,则应选用MSE损失函数。相反,如果只把异常值当作受损数据,则应选用MAE损失函数。
Huber损失(平滑的平均绝对误差)
Huber损失对数据中的异常点没有平方误差损失那么敏感。它在0也可微分。
本质上,Huber损失是绝对误差,只是在误差很小时,就变为平方误差。误差降到多小时变为二次误差由超参数δ(delta)来控制。
在[0-δ,0+δ]之间时,等价为MSE,
而在[-∞,δ]和[δ,+∞]时为MAE。
MAE问题:不变的大梯度,可能导致在使用梯度下降快要结束时,错过了最小点。
MSE:梯度会随着损失的减小而减小,使结果更加精确。
在这种情况下,Huber损失
就非常有用。
它会由于梯度的减小而落在最小值附近。比起MSE,它对异常点更加鲁棒。因此,Huber损失结合了MSE和MAE的优点。
但是,Huber损失的问题是我们可能需要不断调整超参数delta
。
Log-Cosh损失
Log-cosh是另一种应用于回归问题中的,且比L2更平滑
的的损失函数。它的计算方式是预测误差的双曲余弦的对数
。
优点:对于较小的x,log(cosh(x))近似等于(x^2)/2,对于较大的x,近似等于abs(x)-log(2)。这意味着‘logcosh’基本类似于均方误差,但不易受到异常点的影响。它具有Huber损失所有的优点,但不同于Huber损失的是,Log-cosh二阶处处可微。
但Log-cosh损失也并非完美,其仍存在某些问题
。比如误差很大的话
,一阶梯度和Hessian会变成定值
,这就导致XGBoost出现缺少分裂点的情况。
分位数损失
更关注区间预测
而不仅是点预测时: 分位数损失函数。
概念: 使用最小二乘回归进行区间预测
,基于的假设是残差(y-y_hat)是独立变量,且方差保持不变。
一旦违背了这条假设,那么线性回归模型就不成立。
(即便对于具有变化方差
或非正态分布的残差
,基于分位数损失的回归也能给出合理的预测区间
。)
例子,(理解基于分位数损失的回归是如何对异方差数据起作用)