【问题标题】:Why does the log loss function return undefined when the prediction has 1 or 0?为什么预测为 1 或 0 时 log loss 函数返回 undefined?
【发布时间】:2019-04-03 01:38:51
【问题描述】:

下面是我用来计算log loss的R代码:

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

但是,如果预测列表包含 0 或 1,则对应的 log loss 将分别返回 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] 信息

我不太明白为什么会这样,如果结果包含0或1,这会不会导致无法计算log loss?

【问题讨论】:

  • 我对@9​​87654325@ 和Inf 的看法正好相反,不要认为这会改变你的整体问题。奇怪,我不知道为什么 0*log(0)NaN,我希望它是 0 ...
  • 兄弟你能告诉我c(0.9, 0, 0.9)中的c是做什么的吗?
  • @r2evans 我认为 log(0) 是无穷大,0*infinity 也是无穷大。
  • log(0) 在技术上是未定义的,所以这对我来说更有意义。参考:rapidtables.com/math/algebra/ln/Ln_of_0.html。至于c(0.9, 0, 0.9) 中的c,它是R 中用于构建/连接向量的基本函数。

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


【解决方案1】:

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

当我们使用logloss时,如果预测为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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 2021-11-19
    相关资源
    最近更新 更多