机器学习中的五种回归损失函数

Submitted by chenrouyu on Sat, 06/09/2018 - 13:20
1

回归损失函数

1.均方根误差,二次损失,L2范数

均方根误差(MSE)是最常见的回归损失函数。MSE是每一个预测值与目标值之间差值的平方和。

2

下图展示的就是一个目标值是100,预测值在-1000到1000之间。当预测值到达100时,损失函数降到最低。损失函数值的范围在0到正无穷之间。

3

2.平均绝对误差,L1范数

平均绝对误差(MAE)是另一种回归损失函数。MAE是指目标值与预测值之差的绝对值之和。所以他考虑的是误差的平均值大小,并不考虑他们的方向(如果要考虑方向,那就是使用平均偏差(MBE),不加绝对值)。MAE的范围是从0到正无穷。

4

5

MSE VS MAE (L2 范数 VS L1范数)

简短地说,使用根误差更容易解决问题,但是使用绝对值误差对异常值更敏感。下面就解释原因。

我们在训练机器学习模型的时候,总是找损失函数的最小值。当然,到达最低点时,损失函数和目标函数都会到达最小。

我们快速浏览一下python代码。我们可以写出我们自己的函数或者库函数。

# true: Array of true target variable

# pred: Array of predictions
 
def mse(true, pred):    

          return np.sum((true - pred)**2)    

def mae(true, pred):

         return np.sum(np.abs(true - pred))

 

我们比较两种情况下MAE和均方根误差开方(RMSE:MSE开二次方的结果)后的结果,这样做只是为了保证结果都是一次的。在第一种情况下,预测值与真实值非常接近,并且观测值的结果方差都很小。第二种情况下,有一个异常值,并且误差很大。

6
 

我们从上述结果中发现了什么?这告诉我们该如何去选择损失函数?

因为MSE是把每一个预测值的误差(y — y_predicted = e), 都平方了,所以当e>1时,MSE的结果就会很大。如果在数据中存在异常值,e就会很大,MSE>>e.这样MSE模型会比MAE在异常值上占更大权重。在第二种情况下,RMSE的模型中通过开方降低了异常值的影响,但这也同时也会降低其他非异常值的误差,模型的整体表现也会因此受到影响。

当数据中存在异常值时,MAE损失函数会更加出色。也就是说,我们在训练过程中错误地接受了过大或者过小的数据,但是在测试环境中并没有。

直觉上我们也可以这样理解,如果我们仅仅需要对最小化MSE损失函数的所有观测值给出一个预测,那么这个预测值应该是所以目标值的平均。但是如果我们是要最小化MAE损失函数,预测值应该是所以观测值的中位数。中位数在处理异常值时比平均值更强大,这样MAE损失函数在处理异常值时也比MSE损失函数更有效。

在神经网络模型 中使用MAE损失函数的最大问题是他的梯度总是一样的(一个常数值)。这就意味着当损失值很小时,梯度也可能很大。这对于模型学习很不利。为了解决这个问题,我们采用灵活的学习率,当接近最小值时,梯度会变小。MSE在这种情况下会表现的很好,甚至在学习率不变时都能收敛。当损失数值很大时,MSE的梯度会很大,当损失值接近0时,MSE的梯度也会很小,训练结果也会更加准确。

7

决定使用哪种损失函数

如果数据中的异常值所反映的异常现象对整个任务很重要,那么我们不能忽略他,选择MSE作为损失函数。如果异常点仅仅代表了被损坏的数据,那我们可以选择MAE损失函数。

两者的问题:也存在着两种损失函数都没有用的情况。如果数据集中90%的目标值都是150,10%的目标值在0—30之间。MAE所在的模型得出的所有预测结果是150,忽略了10%的异常值。MSE所在模型的预测结果是有许多在0-30之间,因为他会偏向异常值。