sklearn.metrics.log_loss, кажется, дает неверные результаты для np.arrays.
Допустим, у вас есть 2 идентичных образца с тремя классами.
import numpy as np
from sklearn.metrics import log_loss
y_true = np.array([[1,0,0],[1,0,0]])
y_pred = np.array([[0.2,0.1,0.7],[0.2,0.1,0.7]])
Потери для первого образца должен быть равен следующему:
-(np.log(0.2) + np.log(1-0.1) + np.log(1-0.7))/3
>>> 0.9729237441392876
Действительно:
log_loss(y_true[0,:],y_pred[0,:])
>>> 0.9729237441392874
Однако все меняется, если мы берем оба образца одновременно:
log_loss(y_true[:,:],y_pred[:,:])
>>> 1.6094379124341003
update Кажется, рассчитывается только убыток для этого первого класса:
log_losses = -(y_true * np.log(y_pred) + (1-y_true) * np.log(1-y_pred))
>>> array([[1.60943791, 0.10536052, 1.2039728 ],
[1.60943791, 0.10536052, 1.2039728 ]])
Я использую sklearn 0.23 и python 3.8.3.