Почему функция потери журнала возвращает неопределенное значение, когда прогноз имеет 1 или 0? - PullRequest
0 голосов
/ 30 октября 2018

Ниже приведен код R, который я использовал для расчета потерь в журнале:

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

Однако, если список прогнозирования содержит 0 или 1, соответствующая потеря в журнале вернет Бесконечность или 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 голосов
/ 30 октября 2018

Проблема в том, что мы имеем дело с логарифмом 0.

Когда мы используем logloss, если прогноз равен 0 или 1, мы обычно используем правило minmax , чтобы отвлечь его от 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)

...