Scikit-learn中Hinge Loss与常规图表差异及组合适配原因
Scikit-learn铰链损失(Hinge Loss)与标准图表趋势差异解析
问题背景
我见过两张铰链损失的标准图表,但使用scikit-learn的hinge_loss()生成的图表趋势与它们完全相反,相关代码及对应数值如下:
真实标签y_true = 1时的代码与结果
from sklearn.metrics import hinge_loss import matplotlib.pyplot as plt import numpy as np predicted = np.arange(-10, 11, 1) y_true = [1] * len(predicted) loss = [0] * len(predicted) for i, (p, y) in enumerate(zip(predicted, y_true)): loss[i] = hinge_loss(np.array([y]), np.array([p])) plt.plot(predicted, loss) plt.axvline(x = 0, color = 'm', linestyle='dashed') plt.axvline(x = -1, color = 'r', linestyle='dashed') plt.axvline(x = 1, color = 'g', linestyle='dashed')
对应损失数值:
hinge_loss([1], [-5]) = 0.0, hinge_loss([1], [-1]) = 0.0, hinge_loss([1], [0]) = 1.0, hinge_loss([1], [1]) = 2.0, hinge_loss([1], [5]) = 6.0
真实标签y_true = -1时的代码与结果
predicted = np.arange(-10, 11, 1) y_true = [-1] * len(predicted) loss = [0] * len(predicted) for i, (p, y) in enumerate(zip(predicted, y_true)): loss[i] = hinge_loss(np.array([y]), np.array([p])) plt.plot(predicted, loss) plt.axvline(x = 0, color = 'm', linestyle='dashed') plt.axvline(x = -1, color = 'r', linestyle='dashed') plt.axvline(x = 1, color = 'g', linestyle='dashed')
对应损失数值:
hinge_loss([-1], [-5]) = 0.0, hinge_loss([-1], [-1]) = 0.0, hinge_loss([-1], [0]) = 1.0, hinge_loss([-1], [1]) = 2.0, hinge_loss([-1], [5]) = 6.0
核心疑问1
为何scikit-learn的hinge_loss()计算结果与标准铰链损失图表的趋势相反?
补充:特殊值组合生成标准趋势图表
我发现利用hinge_loss([0], [-1])==0、hinge_loss([-2], [-1])==0的特性,无需翻转数值就能生成与标准图表一致的结果,代码如下:
对应y_true = 1的修正代码
predicted = np.arange(-10, 11, 1) y_true = [1] * len(predicted) loss = [0] * len(predicted) for i, (p, y) in enumerate(zip(predicted, y_true)): loss[i] = hinge_loss(np.array([y, 0]), np.array([p, -1])) * 2 plt.plot(predicted, loss) plt.axvline(x = 0, color = 'm', linestyle='dashed') plt.axvline(x = -1, color = 'r', linestyle='dashed') plt.axvline(x = 1, color = 'g', linestyle='dashed')
对应y_true = -1的修正代码
predicted = np.arange(-10, 11, 1) y_true = [-1] * len(predicted) loss = [0] * len(predicted) for i, (p, y) in enumerate(zip(predicted, y_true)): loss[i] = hinge_loss(np.array([y,-2]), np.array([p,-1])) * 2 plt.plot(predicted, loss) plt.axvline(x = 0, color = 'm', linestyle='dashed') plt.axvline(x = -1, color = 'r', linestyle='dashed') plt.axvline(x = 1, color = 'g', linestyle='dashed')
核心疑问2
这些特定值组合为何能有效生成符合预期的铰链损失图表?
内容的提问来源于stack exchange,提问作者Alberto
相关产品推荐
相关产品推荐

