为什么当预测值为1或0时,对数损失函数返回未定义?

时间:2018-10-30 03:44:11

标签: python r neural-network deep-learning evaluation

下面是我用来计算日志损失的R代码:

LogLoss <- function(pred, res){
    (-1/length(pred)) * sum (res * log(pred) + (1-res)*log(1-pred)) }

但是,如果预测列表包含0或1,则相应的对数丢失将分别返回Infinity或NaN。

LogLoss(c(0.9,0,0.2), c(1,1,1))
  

[1] NaN

LogLoss(c(0.9,1,0.2), c(1,1,1))
  

[1] Inf

我不太明白为什么会这样,如果结果包含0或1,这是否会使计算对数丢失成为不可能?

1 个答案:

答案 0 :(得分:0)

问题在于我们正在处理对数0。

当使用对数损失时,如果预测为0或1,则通常使用minmax rule使其偏离0和1。

例如,

> pred = max(min(c(0.9,0,0.2), 1-10^-15), 10^-15)
> LogLoss(pred, c(1,1,1))
[1] 103.6163

备注:

我进行了实验,获得了与您相反的结果。 log(0)= -Inf和0 * log(0)= NaN(0倍是NaN)