scipy.special.huber#

scipy.special.huber(delta, r, out=None) = <ufunc 'huber'>#

Huber 损失函数。

\[\begin{split}\text{huber}(\delta, r) = \begin{cases} \infty & \delta < 0 \\ \frac{1}{2}r^2 & 0 \le \delta, | r | \le \delta \\ \delta ( |r| - \frac{1}{2}\delta ) & \text{否则} \end{cases}\end{split}\]
参数:
deltandarray

输入数组,指示二次损失与线性损失的切换点。

rndarray

输入数组,可能表示残差。

outndarray,可选

可选的函数值输出数组

返回:
标量或 ndarray

计算出的 Huber 损失函数值。

另请参阅

pseudo_huber

此函数的平滑近似

备注

huber 在稳健统计或机器学习中用作损失函数很有用,与常见的平方误差损失相比,可以减少异常值的影响。幅度大于 delta 的残差不会平方 [1]

通常,r 表示残差,即模型预测与数据之间的差异。那么,对于 \(|r|\leq\delta\)huber 类似于平方误差,对于 \(|r|>\delta\),则类似于绝对误差。这样,对于像平方误差损失函数这样的小残差,Huber 损失通常在模型拟合中实现快速收敛,并且仍然像绝对误差损失一样减少异常值(\(|r|>\delta\))的影响。由于 \(\delta\) 是平方误差和绝对误差之间的分界点,因此必须针对每个问题仔细调整。huber 也是凸的,使其适合基于梯度的优化。

在 0.15.0 版本中添加。

参考文献

[1]

Peter Huber. “位置参数的稳健估计”,1964 年。《统计年鉴》。53 (1): 73 - 101。

示例

导入所有必要的模块。

>>> import numpy as np
>>> from scipy.special import huber
>>> import matplotlib.pyplot as plt

计算 delta=1r=2 处的值

>>> huber(1., 2.)
1.5

通过为 delta 提供 NumPy 数组或列表来计算不同 delta 的函数。

>>> huber([1., 3., 5.], 4.)
array([3.5, 7.5, 8. ])

通过为 r 提供 NumPy 数组或列表来计算不同点的函数。

>>> huber(2., np.array([1., 1.5, 3.]))
array([0.5  , 1.125, 4.   ])

通过为具有广播兼容形状的两者提供数组,可以计算不同 deltar 的函数。

>>> r = np.array([1., 2.5, 8., 10.])
>>> deltas = np.array([[1.], [5.], [9.]])
>>> print(r.shape, deltas.shape)
(4,) (3, 1)
>>> huber(deltas, r)
array([[ 0.5  ,  2.   ,  7.5  ,  9.5  ],
       [ 0.5  ,  3.125, 27.5  , 37.5  ],
       [ 0.5  ,  3.125, 32.   , 49.5  ]])

绘制不同 delta 的函数。

>>> x = np.linspace(-4, 4, 500)
>>> deltas = [1, 2, 3]
>>> linestyles = ["dashed", "dotted", "dashdot"]
>>> fig, ax = plt.subplots()
>>> combined_plot_parameters = list(zip(deltas, linestyles))
>>> for delta, style in combined_plot_parameters:
...     ax.plot(x, huber(delta, x), label=fr"$\delta={delta}$", ls=style)
>>> ax.legend(loc="upper center")
>>> ax.set_xlabel("$x$")
>>> ax.set_title(r"Huber loss function $h_{\delta}(x)$")
>>> ax.set_xlim(-4, 4)
>>> ax.set_ylim(0, 8)
>>> plt.show()
../../_images/scipy-special-huber-1.png