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)