sklearn.metrics.hinge_loss

sklearn.metrics.hinge_loss()

Pérdida media de la bisagra (no regularizada).

En el caso de la clase binaria, asumiendo que las etiquetas en y_true están codificadas con +1 y -1, cuando se comete un error de predicción margin = y_true * pred_decision es siempre negativo (ya que los signos no están de acuerdo), lo que implica que 1 - margin es siempre mayor que 1. La pérdida acumulada de la bisagra es por lo tanto un límite superior del número de errores cometidos por el clasificador.

En el caso multiclase, la función espera que todas las etiquetas estén incluidas en y_true o que se proporcione un argumento de etiquetas opcionales que contenga todas las etiquetas. El margen multietiqueta se calcula de acuerdo con el método Crammer-Singer. Como en el caso binario, la pérdida acumulada de la bisagra es un límite superior del número de errores cometidos por el clasificador.

Más información en el Manual de usuario.

Parámetros
y_truearreglo de forma (n_samples,)

Objetivo verdadero, consistiendo de enteros de dos valores. La etiqueta positiva debe ser mayor a la etiqueta negativa.

pred_decisionarreglo de forma (n_samples,) o (n_samples, n_classes)

Decisiones predichas, devueltas por decision_function (flotantes).

labelsarray-like, default=None

Contiene todas las etiquetas para el problema. Se utiliza en la pérdida de bisagras multiclases.

sample_weightarray-like de forma (n_samples,), default=None

Ponderados de muestras.

Devuelve
lossflotante

Referencias

1

Entrada de Wikipedia en la pérdida de Hinge.

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.

Ejemplos

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

En el caso multiclase:

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