sklearn.metrics.hinge_loss

sklearn.metrics.hinge_loss(y_true, pred_decision, *, labels=None, sample_weight=None)

平均铰链损耗(非常规)

在二元类情况下,假设y_true中的标签用+1和-1编码,则在发生预测错误时,margin = y_true * pred_decision始终为负(因为符号不同),这意味着1-margin始终大于1。 因此,累积的铰链损耗是分类器所犯错误数量的上限。

在多类情况下,该函数期望所有标签都包含在y_true中,或者提供一个包含所有标签的可选标签参数。 多标签边距是根据Crammer-Singer的方法计算的。 与二进制情况一样,累积的铰链损耗是分类器得出错误数量的上限。

用户指南中阅读更多内容。

参数 说明
y_true array, shape = [n_samples]
真实目标,由两个值的整数组成。 正标签必须大于负标签。
pred_decision array, shape = [n_samples] or [n_samples, n_classes]
预测决策,由Decision_function输出(浮点数)。
labels array, optional, default None
包含问题的所有标签。 用于多类铰链损耗。
sample_weight array-like of shape (n_samples,), default=None
样本权重。
返回值 说明
loss float

参考

1 Wikipedia entry on the Hinge loss

2 Koby Crammer, Yoram Singer. On the Algorithmic Implementation of Multiclass Kernel-based Vector Machines. Journal of Machine Learning Research 2, (2001), 265-292

3 L1 AND L2 Regularization for Multiclass Hinge Loss Models by Robert C. Moore, John DeNero.

示例

>>> from sklearn import svm
>>> from sklearn.metrics import hinge_loss
>>> X = [[0], [1]]
>>> y = [-11]
>>> est = svm.LinearSVC(random_state=0)
>>> est.fit(X, y)
LinearSVC(random_state=0)
>>> pred_decision = est.decision_function([[-2], [3], [0.5]])
>>> pred_decision
array([-2.18...,  2.36...,  0.09...])
>>> hinge_loss([-111], pred_decision)
0.30...

在多类情况下:

>>> import numpy as np
>>> X = np.array([[0], [1], [2], [3]])
>>> Y = np.array([0123])
>>> labels = np.array([0123])
>>> est = svm.LinearSVC()
>>> est.fit(X, Y)
LinearSVC()
>>> pred_decision = est.decision_function([[-1], [2], [3]])
>>> y_true = [023]
>>> hinge_loss(y_true, pred_decision, labels=labels)
0.56...