多分类场景下scikit-learn log_loss与自定义计算结果不一致问题
多分类场景下log_loss计算结果差异的排查
我在研究分类器的log_loss指标时,分别尝试使用scikit-learn库中的log_loss函数,以及自行编写代码计算该指标以加深理解。二分类场景下两种方式得到的结果一致,但应用到多分类场景时,结果却不相同。
测试代码
from sklearn.metrics import log_loss y_true = [0, 1, 2, 2] y_pred = [[.9, .05,.05], [.8, .1,.1], [.3, .3,.4], [.01, .45, .44]] print(log_loss(y_true, y_pred,labels=[0,1,2])) from numpy import log as ln N = len(y_true) sum=0 for i in range(0,N): sum += ln(y_pred[i][y_true[i]]) log_loss = (1/N)*(-1)*sum print(log_loss)
输出结果
1.0099640942345076 1.0363042231489643
问题原因
经排查发现,计算逻辑本身并无问题,差异源于预测概率输入的低级错误:y_pred最后一个元素的0.44应改为0.54,修正后两种方式的计算结果即可一致。
内容的提问来源于stack exchange,提问作者Ling
相关产品推荐
相关产品推荐

