hinge_loss#

sklearn.metrics.hinge_loss(y_true, pred_decision, *, labels=None, sample_weight=None)[source]#

平均合页损失(非正则化)。

在二分类情况下,假设 `y_true` 中的标签编码为 +1 和 -1,当出现预测错误时,margin = y_true * pred_decision 总是负的(因为符号不一致),这意味着 1 - margin 总是大于 1。因此,累积的合页损失是分类器所犯错误数量的上限。

在多分类情况下,函数要求 `y_true` 中包含所有标签,或者提供一个可选的 `labels` 参数,其中包含所有标签。多标签裕度根据 Crammer-Singer 的方法计算。与二分类情况一样,累积的合页损失是分类器所犯错误数量的上限。

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

参数:
y_true形状为 (n_samples,) 的类数组

真实目标,由两个整数值组成。正标签必须大于负标签。

pred_decision形状为 (n_samples,) 或 (n_samples, n_classes) 的类数组

预测决策,由 `decision_function` 输出(浮点数)。

labels类数组,默认为 None

包含问题的所有标签。用于多分类合页损失。

sample_weight形状为 (n_samples,) 的类数组,默认为 None

样本权重。

返回:
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.

示例

>>> from sklearn import svm
>>> from sklearn.metrics import hinge_loss
>>> X = [[0], [1]]
>>> y = [-1, 1]
>>> 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([-1, 1, 1], pred_decision)
0.30

在多分类情况下

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