hinge_loss#

sklearn.metrics.hinge_loss(y_true, pred_decision, *, метки=None, sample_weight=None)[источник]#

Средняя потеря на шарнире (нерегуляризованная).

В случае бинарного класса, предполагая, что метки в y_true закодированы как +1 и -1, когда допускается ошибка предсказания, margin = y_true * pred_decision всегда отрицательно (поскольку знаки не совпадают), что подразумевает 1 - margin всегда больше 1. Суммарная шарнирная потеря, следовательно, является верхней границей количества ошибок, допущенных классификатором.

В многоклассовом случае функция ожидает, что либо все метки включены в y_true, либо предоставлен необязательный аргумент labels, который содержит все метки. Многометочный запас рассчитывается согласно методу Крэммера-Сингера. Как и в бинарном случае, кумулятивная шарнирная потеря является верхней границей количества ошибок, допущенных классификатором.

Подробнее в Руководство пользователя.

Параметры:
y_truearray-like формы (n_samples,)

Истинная цель, состоящая из целых чисел двух значений. Положительная метка должна быть больше отрицательной метки.

pred_decisionмассивоподобный формы (n_samples,) или (n_samples, n_classes)

Предсказанные решения, как выводимые функцией decision_function (числа с плавающей точкой).

меткиarray-like, default=None

Содержит все метки для задачи. Используется в мультиклассовом hinge loss.

sample_weightarray-like формы (n_samples,), по умолчанию=None

Веса выборок.

Возвращает:
потеряfloat

Средняя потеря с шарниром.

Ссылки

[2]

Коби Краммер, Йорам Сингер. Об алгоритмической реализации многоклассовых ядерных векторных машин. Журнал исследований машинного обучения 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