SVM

Описание

Функция потерь SVM, являющаяся расширением классического Hinge-loss на задачи многоклассовой классификации, реализует принцип "один против всех".

Для функции ошибки возможны две формулы в зависимости от выбранной метрики (L1 или L2):

\begin{equation} L_{L1} = \sum_{y \neq i}max(0, p_y-p_i+1) \end{equation} \begin{equation} L_{L2} = \sum_{y \neq i}max(0, p_y-p_i+1)^2 \end{equation}

где

p_y - "сырое" предсказание классификатора по поводу принадлежности объекта реальному классу y;
p_i - "сырое" предсказание классификатора по поводу принадлежности объекта i-ому классу, не являющемуся целевым.

Инициализация

def __init__(self, mode="l1"):

Параметры

Параметр Возможные типы Описание По умолчанию
mode str Выбор метрики, по которой будет проводиться расчёт функции ошибки. 'l1'

Пояснения

mode - принимает значения 'l1' или 'l2'.

Примеры


Необходимые импорты:

>>> import numpy as np
>>> from PuzzleLib.Backend import gpuarray
>>> from PuzzleLib.Cost import SVM

Info

gpuarray необходим для правильного размещения тензора на GPU.

Синтетические целевой и предсказательный тензоры:

>>> scores = gpuarray.to_gpu(np.random.randn(10, 4).astype(np.float32))
>>> labels = gpuarray.to_gpu((np.random.randint(low=0, high=2, size=(10, )) * 2 - 1).astype(np.int32))

Important

Не забывайте, что первым измерением целевого и предсказательного тензоров является размер батча.

Инициализация функции ошибки:

>>> svm = SVM()

Расчёт ошибки и градиента на батче:

>>> error, grad = svm(scores, labels)