【问题标题】:How does sklearn log_loss know the order of probabilities?sklearn log_loss 如何知道概率的顺序?
【发布时间】:2020-12-25 21:23:02
【问题描述】:

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

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 中关于真值标签顺序的问题,而是关于概率顺序的问题。

【问题讨论】:

    标签: python scikit-learn classification


    【解决方案1】:

    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。

    【讨论】:

    • 在检查相关的documentation 之前访问源代码可以说是矫枉过正。
    猜你喜欢
    • 1970-01-01
    • 2021-11-04
    • 2015-05-04
    • 2015-02-13
    • 2019-11-20
    • 2019-10-19
    • 2019-11-30
    • 2013-12-24
    • 2016-11-19
    相关资源
    最近更新 更多