下面是我用来计算日志损失的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,这是否会使计算对数丢失成为不可能?
答案 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)