Toggle Menu
Prev Up Next

scikit-learn 1.3.2
Other versions

Please cite us if you use the software.

# `sklearn.metrics`.hinge_loss

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

  Average hinge loss (non-regularized).

  In binary class case, assuming labels in y_true are encoded with +1 and -1, when a prediction mistake is made, `margin = y_true * pred_decision` is always negative (since the signs disagree), implying `1 - margin` is always greater than 1. The cumulated hinge loss is therefore an upper bound of the number of mistakes made by the classifier.

  In multiclass case, the function expects that either all the labels are included in y_true or an optional labels argument is provided which contains all the labels. The multilabel margin is calculated according to Crammer-Singer’s method. As in the binary case, the cumulated hinge loss is an upper bound of the number of mistakes made by the classifier.

  Read more in the User Guide.

  Parameters:
    y_true array-like of shape (n_samples,)

      True target, consisting of integers of two values. The positive label must be greater than the negative label.

    pred_decision array-like of shape (n_samples,) or (n_samples, n_classes)

      Predicted decisions, as output by decision_function (floats).

    labels array-like, default=None

      Contains all the labels for the problem. Used in multiclass hinge loss.

    sample_weight array-like of shape (n_samples,), default=None

      Sample weights.

  Returns:
    loss float

      Average hinge loss.

  References

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

  Examples

      >>> from sklearn import svm
      >>> from sklearn.metrics import hinge_loss
      >>> X = [[0], [1]]
      >>> y = [-1, 1]
      >>> est = svm.LinearSVC(dual="auto", random_state=0)
      >>> est.fit(X, y)
      LinearSVC(dual='auto', 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...

  In the multiclass case:

      >>> 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(dual="auto")
      >>> est.fit(X, Y)
      LinearSVC(dual='auto')
      >>> pred_decision = est.decision_function([[-1], [2], [3]])
      >>> y_true = [0, 2, 3]
      >>> hinge_loss(y_true, pred_decision, labels=labels)
      0.56...

## Examples using `sklearn.metrics.hinge_loss`

Plot classification boundaries with different SVM Kernels

Plot classification boundaries with different SVM Kernels