Кросс-Энтропия

Cross-entropy misfortune, или log misfort, измеряет представление модели ордера, чья доходность по вероятности находится где-то в диапазоне 0 и 1. Cross-entropy misfort увеличивается по мере того, как ожидаемая вероятность отклоняется от реальной отметки. Таким образом, прогнозирование вероятности .012 при истинном восприятии имени 1 будет ужасным и принесет высокую оценку несчастья. Идеальная модель имела бы потерю бревна 0.

_images/cross_entropy.png

На приведенной выше диаграмме показаны масштабы мыслимых неудач при истинном восприятии (isDog = 1). По мере приближения предполагаемой вероятности к 1, бревенчатая неудача постепенно уменьшается. По мере уменьшения ожидаемой вероятности, как бы то ни было, несчастье на бревне быстро возрастает. Бревенчатая неудача наказывает за два вида ошибок, но особенно за те ожидания, которые являются верными и неверными!

Кросс-энтропия и ошибка лога в некоторой степени уникальны в зависимости от настроек, однако в ИИ, когда процент ошибок при вычислениях находится в диапазоне 0 и 1, они решаются на что-то очень похожее.

Код

Def CrossEntropy(yHat, y):

if y == 1:

return -log(yHat)

Иначе:

return -log(1 – yHat)

Математика

В двоичной классификации, где число классов M равно 2, кросс-энтропия может быть рассчитана как:

-(ylog(p)+(1-y)log(1-p)))

Если M>2 (т.е. классификация по нескольким классам), мы вычисляем отдельный убыток для каждой метки класса на одно наблюдение и суммируем результат.

-∑c=1Myo,clog(po,c)

Примечание

М – количество классов (собака, кошка, рыба)

бревно – натуральное бревно

y – двоичный индикатор (0 или 1), если метка класса c является правильной классификацией для наблюдения o

p – прогнозируемое вероятностное наблюдение o относится к классу c

Петля

Используется для классификации.

Код

Def Hinge(yHat, y):

вернуть np.max(0, 1 – yHat * y)

Huber

Обычно используется для регрессии. Она менее чувствительна к отклонениям, чем MSE, так как рассматривает ошибку как квадрат только внутри интервала.

Lδ={12(y-y^)2δ((y-y-y^)-12δ)if|(y-y^)|<<δв противном случае

Код

def Huber(yHat, y, delta=1.):

возвращать np.where(np.abs(y-yHat) <дельта,.5*(y-yHat)**2 , delta*(np.abs(y-yHat)-0.5*delta)):)

Дополнительную информацию можно найти на Huber Loss в Википедии.

Kullback-Leibler .

Код

def KLDivergence(yHat, y):

“””

Парама yHat:

:param y:

:return: KLDiv(yHat || y)

“””

вернуть np.sum(yHat * np.log((yHat / y)))

МЭ (L1)

Средняя абсолютная ошибка, или потеря L1. Отличный обзор ниже [6] и [10].

Код

Def L1(yHat, y):

return np.sum(np.absolute(yHat – y))

МШЭ (L2)

Средняя квадратичная ошибка, или потеря L2. Отличный обзор ниже [6] и [10].

Def MSE(yHat, y):

вернуть np.sum((yHat – y)**2). / размер

def MSE_prime(yHat, y):

return yHat – y