Ответ
Log Loss (Binary Cross-Entropy) станет неопределённым (NaN или бесконечным), потому что его формула требует, чтобы предсказания p были в интервале (0, 1).
Формула Log Loss для одного примера:
L(y, p) = -[y * log(p) + (1 - y) * log(1 - p)]
Ключевая проблема: Аргумент логарифма p и (1-p) должен быть положительным. Умножение p на 2:
- Если исходное
p > 0.5, то новое2p > 1. Тогда(1 - 2p) < 0, иlog(1 - 2p)не определён для отрицательных чисел. - Если исходное
pбыло мало (например, 0.1), то2p = 0.2всё ещё валидно, но для другого примера сp=0.6получим1.2, что уже приводит к ошибке.
Практическая демонстрация:
import numpy as np
from sklearn.metrics import log_loss
# Истинные метки и исходные валидные предсказания
y_true = np.array([1, 0, 1, 0])
p_original = np.array([0.9, 0.1, 0.6, 0.4]) # Все в (0,1)
original_loss = log_loss(y_true, p_original)
print(f"Original Log Loss: {original_loss:.4f}") # ~0.283
# НЕПРАВИЛЬНО: умножение без нормализации
p_scaled_wrong = p_original * 2
print("Scaled predictions:", p_scaled_wrong) # [1.8, 0.2, 1.2, 0.8]
# Попытка вычисления приведет к предупреждениям и NaN, т.к. значения >1 и <0
try:
wrong_loss = log_loss(y_true, p_scaled_wrong)
except Exception as e:
print(f"Ошибка: {e}") # На практике будет warning и NaN
Что если нормализовать? Если после умножения на 2 применить преобразование, возвращающее значение в [0,1] (например, сигмоиду), то это эквивалентно изменению калибровки модели. Предсказания станут более "уверенными" (ближе к 0 или 1). Если модель была уже хорошо откалибрована, такое усиление уверенности ухудшит Log Loss, так как он штрафует за излишнюю уверенность в неверных предсказаниях.
Вывод: Любое изменение масштаба предсказаний перед расчётом Log Loss требует их последующей нормализации в интервал (0,1). Прямое умножение без этого делает метрику невычислимой.