Logistic损失和交叉熵损失之间的区别

时间:2020-03-03 04:04:47

标签: machine-learning logistic-regression loss-function cross-entropy

对于二进制分类方案中的逻辑损失和交叉熵损失,我感到困惑。 根据维基百科(https://en.wikipedia.org/wiki/Loss_functions_for_classification),物流损失定义为:

enter image description here

其中v=y*y_hat

交叉熵损失定义为:

enter image description here

来自维基百科(https://en.wikipedia.org/wiki/Loss_functions_for_classification):

很容易检查逻辑损失和二元交叉熵损失(对数损失)是否实际上相同(直到乘法常数1 / log(2))

但是,当我用一些代码对其进行测试时,我发现它们并不相同。这是python代码:

from numpy import exp
from math import log

def cross_entropy_loss(y, yp):
    return -log(1-yp) if y==0 else -log(yp)

def logistic_loss(y, yp):
    return log(1+exp(-y*yp))/log(2)

y, yp = 0, 0.3  # y= {0, 1} for cross_entropy_loss
l1 = cross_entropy_loss(y, yp)
y, yp = -1, 0.3  # y = {-1, 1} for logistic loss
l2 = logistic_loss(y, yp)
print(l1, l2, l1/l2)

y, yp = 1, 0.9
l1 = cross_entropy_loss(y, yp)
l2 = logistic_loss(y, yp)
print(l1, l2, l1/l2)

输出显示损耗值既不相同,也不是恒定的:

0.35667494393873245 1.2325740743522222 0.2893740436056004
0.10536051565782628 0.49218100325603786 0.21406863523949665

有人可以解释为什么他们“实际上是相同的”吗?

1 个答案:

答案 0 :(得分:0)

在Wikipedia v中定义为

v = -yf(x)。

维基百科中未定义的是\ hat {y}(即预测标签)。它应定义为(物流功能):

\ hat {y} = 1 /(1 + exp(-f(x)))。

通过将以上定义替换为维基百科的逻辑损失公式,您应该能够恢复交叉熵损失。请注意,交叉熵损失方程式(如上所示)是针对y = {0,1}的公式,而维基百科文章中的公式则针对y = {-1,1}。