概率分类和损失函数

机器算法验证 物流 分类 贝叶斯 二进制数据 损失函数
2022-03-16 16:35:36

我正在尝试比较几个二元分类器。这些分类器(在我的例子中是高斯过程,但没关系)给了我概率预测。让我们介绍一些符号:

yi{0,1}=true class of sample i
pi[0,1]=Pr(yi=1xi),probability that sample i is positive
我知道测量概率分类器准确性的两种“经典”方法:

  1. 0-1 loss:只预测概率最高的类别,并与真实类别进行比较:
    Li=yi1{pi0.5}+(1yi)1{pi>0.5}
  2. logarithmic loss:考虑类的预测概率。
    Li=yilog(pi)(1yi)log(1pi)
    这对我来说很有意义,因为它是样本的对数似然,在分类器诱导的分布下。

现在我建议使用第三种损失函数,我们称之为“概率损失”:

Li=yi(1pi)+(1yi)pi

我有一堆与最后一个损失函数相关的问题:

  1. 是我自己编的,还是众所周知的损失函数?
  2. 直观地说,我会将其解释为“预期的”0-1 损失。这有意义吗?

最重要的是:问题在哪里?我很有信心这个损失函数是有缺陷的,但我看不出在哪里以及如何。

注意这个问题似乎是相关的,特别是对第一个答案的评论。

1个回答

“概率损失”函数在文献中有时被称为“线性分数”。虽然看起来很吸引人,但这个损失函数是不合适的,这意味着它没有设置激励来预测真实概率yi=1. 有关详细信息,请参阅第 4 页。Gneiting 和 Raftery 的 366(“严格正确的评分规则、预测和估计”,美国统计协会杂志,2007 年)。

在实践中,不当意味着一个愚蠢的预测者(例如,他将他的概率偏向零和一的极端)可能比一个合理的预测者获得更好的概率损失。

以下基于 R 代码的示例说明了这一点。

  • 首先,设置随机种子 ( set.seed(1)) 并固定样本大小 ( n <- 10000)
  • 模拟真实概率的任意向量:p_true <- runif(n)
  • 现在,绘制一个遵循这些概率的二元观测向量:y <- runif(n) < p_true
  • 假设安妮是一个无所不知的预测者,并且知道真实的概率p_true她的概率损失(平均每个案例)可以计算如下:loss_Anne <- (sum(p_true[y == FALSE]) + sum((1-p_true)[y == TRUE]))/n
  • 相比之下,考虑根据以下公式做出过度自信预测的第二个预测者 (Bob) p_wrong <- 0.5*(p_true + (p_true >= 0.5))该公式意味着 Bob 将“小”概率(小于 50%)偏向零,而将“大”概率(大于 50%)偏向 1。Bob 的平均损失由下式给出loss_Bob <- (sum(p_wrong[y == FALSE]) + sum((1-p_wrong)[y == TRUE]))/n

在我的电脑上运行这段代码,我发现这loss_Anne是关于0.33, 而loss_Bob大约0.29. 因此,一个完美的预测者(安妮)输给了一个过度自信的预测者,后者故意将他的概率偏向零和一的极端。

因此,概率损失不应该用于模型比较,因为它通常不会选择真正的模型(即使是渐近的)。相反,应该使用严格适当的评分函数,如对数损失或 Brier 评分。再次参见上面提到的参考。