【发布时间】:2020-06-15 09:40:00
【问题描述】:
我对二元分类场景中的逻辑损失和交叉熵损失感到困惑。 根据维基百科 (https://en.wikipedia.org/wiki/Loss_functions_for_classification),逻辑损失定义为:
在哪里v=y*y_hat
交叉熵损失定义为:
来自维基百科 (https://en.wikipedia.org/wiki/Loss_functions_for_classification):
很容易检查逻辑损失和二元交叉熵损失(Log loss)实际上是相同的(直到乘法常数 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
有人能解释一下为什么它们“实际上是一样的”吗?
【问题讨论】:
-
这能回答你的问题吗? math.stackexchange.com/questions/1074276/…
-
@ccl 我试图理解这个答案。我很困惑那个答案中的逻辑损失方程只是交叉熵损失,而不是我上面提到的那个。
标签: machine-learning logistic-regression loss-function cross-entropy