当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy special.huber用法及代码示例


本文简要介绍 python 语言中 scipy.special.huber 的用法。

用法:

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

胡贝尔损失函数。

参数

delta ndarray

输入数组,指示二次损耗与线性损耗变化点。

r ndarray

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

out ndarray,可选

函数值的可选输出数组

返回

标量或 ndarray

计算的 Huber 损失函数值。

注意

huber作为鲁棒统计或机器学习中的损失函数,与常见的平方误差损失相比,可减少异常值的影响,残差的幅度高于三角洲不是平方的[1].

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

参考

[1]

彼得·胡贝尔. “位置参数的稳健估计”,1964 年。统计年鉴。 53(1):73-101。

例子

导入所有必需的模块。

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

计算 r=2delta=1 的函数

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

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

>>> 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.   ])

通过为广播提供兼容形状的数组,可以针对不同的 delta 和 r 计算该函数。

>>> 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=f"$\delta={delta}$", ls=style)
>>> ax.legend(loc="upper center")
>>> ax.set_xlabel("$x$")
>>> ax.set_title("Huber loss function $h_{\delta}(x)$")
>>> ax.set_xlim(-4, 4)
>>> ax.set_ylim(0, 8)
>>> plt.show()
scipy-special-huber-1.png

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.special.huber。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。