问题背景
为什么机器学习在解决回归问题的时候一般使用的是平方损失(均方损失)
问题分析
损失函数是衡量模型预测结果与真实结果之间的一种距离度量,可以计算出每一个样本预测值与其真实值之间的距离,全部加起来就得到了所谓的损失函数。而距离的度量是没有一个标准的范式的,那为什么机器学习在处理回归任务的时候更倾向于用均方误差呢?我们先来看一看求解普通回归任务时候的一个目标函数,若采用预测值与真实值之间的绝对值来度量距离,公式如下:
(
ω
,
b
)
=
a
r
g
m
i
n
(
ω
,
b
)
∑
i
=
1
m
∣
f
(
x
i
)
−
y
i
∣
(\omega^, b) = arg min_{(\omega, b)}\sum_{i=1}^{m}\left|{f(x_i)-y_i}\right|
(ω,b)=argmin(ω,b)i=1∑m∣f(xi)−yi∣
若采用均方误差,公式如下:
(
ω
,
b
)
=
a
r
g
m
i
n
(
ω
,
b
)
∑
i
=
1
m
(
f
(
x
i
)
−
y
i
)
2
(\omega^, b) = arg min_{(\omega, b)}\sum_{i=1}^{m}({f(x_i)}-y_i)^2
(ω,b)=argmin(ω,b)i=1∑m(f(xi)−yi)2 其中:
f
(
x
i
)
=
ω
x
i
+
b
f(x_i) = \omega x_i + b
f(xi)=ωxi+b 即预测值,
y
i
y_i
yi 为真实值,
m
m
m 为样本总数,
ω
\omega
ω 和
b
b
b 为要求解的参数。
原因总结
我们的目标是通过训练得出在这个训练集上面表现得最好的参数 w 和 b w和b w和b,如何得到最好的 w 和 b w和b w和b呢?我们可以通过求导,对 w 和 b w和b w和b进行求导,并令其导数为0,当我们使用绝对值误差的时候,我们就会遇到两个问题:
- 使用绝对值误差的时候,会出现0点不可导问题
- 需要判断 f ( x i ) − y i f(x_i)-y_i f(xi)−yi的正负号
另外的原因:
- 均方误差对预测误差的强度进行了平方,这样可以放大误差中的大值,并以指数方式惩罚异常值,因而在处理离群值或异常值时更为鲁棒。
- MSE 的梯度计算相比 MAE 更为简单和稳定
综上所述,MSE相较于MAE在绝大部分场景都是具有较大优势的,所以MSE在机器学习的各种任务中更受欢迎
测试用例
from sklearn.metrics import mean_squared_error, mean_absolute_error
import numpy as np
# Generate data
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0, 2, 8]
# Calculate MSE and MAE
mse = mean_squared_error(y_true, y_pred)
mae = mean_absolute_error(y_true, y_pred)
print("MSE: ", mse)
print("MAE: ", mae)
在实际的应用中,由于均方误差对于离群点更具鲁棒性,所以通常在数据中存在离群点的情况下,MSE 会比 MAE 更优秀,可以看到,对于真实标签为负数的情况,使用 MAE 的误差度量方法产生了一个较大的误差值(0.5),而使用 MSE 的误差度量方法产生了一个较小的误差值(0.375)。因此,MSE 在该测试用例中表现更优秀。
拓展
均方误差(MSE)作为损失函数的一个重要特点,即其基于高斯分布下的最大似然估计问题。
在回归问题中,我们的目标是预测一些连续型变量,使其尽可能地接近真实值。在这个过程中,模型的预测与真实标签之间会产生一些误差,我们需要度量这个误差的程度,并利用这个度量来优化模型的预测。
均方误差是一个常见的误差度量方法,它度量的是预测值与真实值之间的差异,并且将这个差异平方后求取平均值。均方误差的理论基础是假设误差服从高斯分布。也就是说,我们假设预测值的误差服从正态分布,并且使用均方误差最小化误差,可以从概率最大化的角度来认为我们假定预测值的误差是正常的,这是一个典型的高斯分布下的最大似然估计问题。
简单来说,均方误差的理论基础是对误差的统计分布进行假设,并基于最大似然原则来确定误差分布的参数。这使得均方误差在许多回归问题中都能够提供准确的误差度量,并能够用作模型的损失函数。