序列预测中损失函数详解-MAE、MAPE、RMSE、Huber

损失函数

损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。


文章目录

  • 损失函数
  • 前言
  • 预测与偏置
  • 常见的损失函数
    • Error 与 Bias
    • RMSE
    • 平均绝对误差(Mean Absolute Error,MAE)
    • MAPE
    • 比较
  • Huber 损失函数


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

预测与偏置

序列预测中损失函数详解-MAE、MAPE、RMSE、Huber_第1张图片

常见的损失函数

Error 与 Bias

e t = f t − d t e_{t}={f_{t}-d_{t}} et=ftdt
f t f_{t} ft是预测数据, d t d_{t} dt是真实数据
b i a s = 1 n ∑ n e t bias = \frac{1}{n}\sum_{n}e_{t} bias=n1net

RMSE

R M S E = 1 n ∑ n e t 2 RMSE= \sqrt{\frac{1}{n}\sum_{n}e_{t}^2} RMSE=n1net2
序列预测中损失函数详解-MAE、MAPE、RMSE、Huber_第2张图片
序列预测中损失函数详解-MAE、MAPE、RMSE、Huber_第3张图片
整体偏向离群值。

平均绝对误差(Mean Absolute Error,MAE)

M A E = 1 n ∑ n ∣ e t ∣ MAE= \frac{1}{n}\sum_{n}|e_{t}| MAE=n1net
序列预测中损失函数详解-MAE、MAPE、RMSE、Huber_第4张图片
序列预测中损失函数详解-MAE、MAPE、RMSE、Huber_第5张图片
受离群点(脱离样本分布的异常值)影响较小。

MAPE

M A P E = 1 n ∑ n ∣ e t ∣ d t MAPE = \frac{1}{n}\sum_{n}\frac{|e_{t}|}{d_{t}} MAPE=n1ndtet
也就是误差占真实值的比例,如果同样的误差,当其真实值较小时,会造成误差极大的现象,也就意味着更容易受到较小真实值的影响。

比较

序列预测中损失函数详解-MAE、MAPE、RMSE、Huber_第6张图片
序列预测中损失函数详解-MAE、MAPE、RMSE、Huber_第7张图片
序列预测中损失函数详解-MAE、MAPE、RMSE、Huber_第8张图片
序列预测中损失函数详解-MAE、MAPE、RMSE、Huber_第9张图片

序列预测中损失函数详解-MAE、MAPE、RMSE、Huber_第10张图片
Forecast1 采用样本中较低的值
Forecast2 采用样本的中位数
Forecast3 采用样本的平均数
序列预测中损失函数详解-MAE、MAPE、RMSE、Huber_第11张图片

Huber 损失函数

H u b e r = { 1 2 e t 2 , f o r ∣ e t ∣ ≤ δ δ ∣ e t ∣ − 1 2 δ 2 , o t h e r w i s e Huber = \begin{cases} \frac{1}{2}e_{t}^2,&for|e_{t}|\leq\delta\\ \delta|e_{t}|-\frac{1}{2}\delta^2,&otherwise\\ \end{cases} Huber={21et2,δet21δ2,foretδotherwise
Huber损失对数据中的异常点没有平方误差损失那么敏感。本质上,Huber损失是绝对误差,只是在误差很小时,就变为平方误差。误差降到多小时变为二次误差由超参数 δ ( d e l t a ) \delta(delta) δ(delta)来控制。当Huber损失在 [ 0 − δ , 0 + δ ] [0-\delta, 0+\delta] [0δ,0+δ]之间时,等价为MSE,而在 [ − ∞ , δ ] [-\infty, \delta] [,δ] [ δ , + ∞ ] [\delta,+\infty] [δ,+]时为MAE。Huber损失结合了MSE和MAE的优点,对异常点更加鲁棒。
序列预测中损失函数详解-MAE、MAPE、RMSE、Huber_第12张图片

# huber 损失
def huber(true, pred, delta):
    loss = np.where(np.abs(true-pred) < delta , 0.5*((true-pred)**2), delta*np.abs(true - pred) - 0.5*(delta**2))
    return np.sum(loss)

你可能感兴趣的:(机器学习,深度学习,神经网络)