主页

索引

模块索引

搜索页面

损失函数-回归-平均绝对误差(MAE)

  • Mean Absolute Error

  • 公式:

\[\begin{split}\begin{array}{l} L = \frac{1}{N} \sum_{i=1}^N{|y_i - \hat{y}_i|} \\ 说明: \\ \hat(y): 模型预测值,通常称为预测输出 \end{array}\end{split}\]
  • 优点:对异常值更鲁棒。

  • 缺点:在优化时梯度不连续,可能导致收敛速度较慢。

https://img.zhaoweiguo.com/uPic/2024/11/Fu7wdQ.png

MAE 的曲线呈 V 字型,连续但在 y-f(x)=0 处不可导,计算机求解导数比较困难。而且 MAE 大部分情况下梯度都是相等的,这意味着即使对于小的损失值,其梯度也是大的。这不利于函数的收敛和模型的学习。

  • 值得一提的是,MAE 相比 MSE 有个优点就是 MAE 对离群点不那么敏感,更有包容性。因为 MAE 计算的是误差 y-f(x) 的绝对值,无论是 y-f(x)>1 还是 y-f(x)<1,没有平方项的作用,惩罚力度都是一样的,所占权重一样。

X = np.vstack((np.ones_like(x),x))    # 引入常数项 1
m = X.shape[1]
# 参数初始化
W = np.zeros((1,2))

# 迭代训练
num_iter = 20
lr = 0.01
J = []
for i in range(num_iter):
   y_pred = W.dot(X)
   loss = 1/m * np.sum(np.abs(y-y_pred))
   J.append(loss)
   mask = (y-y_pred).copy()
   mask[y-y_pred > 0] = 1
   mask[mask <= 0] = -1
   W = W + lr * 1/m * mask.dot(X.T)

# 作图
y1 = W[0,0] + W[0,1]*1
y2 = W[0,0] + W[0,1]*20
plt.scatter(x, y)
plt.plot([1,20],[y1,y2],'r--')
plt.xlabel('x')
plt.ylabel('y')
plt.title('MAE')
plt.show()

主页

索引

模块索引

搜索页面