sklearn log_loss 如何知道概率的顺序?

How does sklearn log_loss know the order of probabilities?

考虑 log_loss 的 sklearn 文档中的示例:

from sklearn.metrics import log loss
log_loss(["spam", "ham", "ham", "spam"], [[.1, .9], [.9, .1], [.8, .2], [.35, .65]])

运行 这个,我们得到~0.216的输出。该模型相当擅长对垃圾邮件和垃圾邮件进行分类。

sklearn怎么知道第一个概率是ham,第二个是spam

如果我想翻转标签,即第一个是spam,第二个是ham,我该怎么做?明确提供标签参数不起作用:

log_loss(["spam", "ham", "ham", "spam"], [[.1, .9], [.9, .1], [.8, .2], [.35, .65]], labels=["ham", "spam"])

输出:0.216。

log_loss(["spam", "ham", "ham", "spam"], [[.1, .9], [.9, .1], [.8, .2], [.35, .65]], labels=["spam", "ham"])

输出:0.216。

请注意,这不是关于根据 this question on the stats Stack Exchange 的真值标签顺序的问题,而是关于概率顺序的问题。

sklearn.metrics.log_loss 假定概率标签按字母顺序排列。这可以在 source code.

中看到

要翻转标签,您需要按相反的字母顺序重命名它们,例如aspambham:

from sklearn.metrics import log_loss
log_loss(["aspam", "bham", "bham", "aspam"], [[.1, .9], [.9, .1], [.8, .2], [.35, .65]])

输出:~1.816.