阈值和混淆矩阵

假设您有一个用于垃圾邮件检测的逻辑回归模型,该模型预测一个介于 0 到 1 之间的值,表示给定电子邮件是垃圾邮件的概率。预测结果为 0.50 表示电子邮件为垃圾邮件的可能性为 50%,预测为 0.75 表示电子邮件为垃圾邮件的可能性为 75%,依此类推。

您想在电子邮件应用中部署此模型,以将垃圾邮件过滤到单独的邮件文件夹中。不过,为此,您需要转换模型的原始数值输出(例如0.75)分为“垃圾邮件”或“非垃圾邮件”这两类。

如需进行此转换,您需要选择一个阈值概率,称为分类阈值。然后,概率高于阈值的示例会被分配到正类别(即您要测试的类,此处为 spam)。概率较低的示例会被分配到负类别(即备选类别,此处为 not spam)。

点击此处详细了解分类阈值

您可能会想知道:如果预测得分等于分类阈值(例如,分类阈值为 0.5,得分为 0.5),会怎么样?这种情况的处理取决于为分类模型选择的特定实现。如果得分和阈值相等,Keras 库会预测负类,但其他工具/框架可能会以不同的方式处理这种情况。

假设模型为某封电子邮件评分为 0.99,预测该电子邮件是垃圾邮件的概率为 99%;为另一封电子邮件评分为 0.51,预测该电子邮件是垃圾邮件的概率为 51%。如果您将分类阈值设置为 0.5,模型将将这两封电子邮件都归类为垃圾邮件。如果您将阈值设置为 0.95,则只有得分为 0.99 的电子邮件才会被归类为垃圾邮件。

虽然 0.5 看起来像是一个直观的阈值,但如果一种错误分类的代价高于另一种类型,或者类别不平衡,那么这并不是一个好主意。如果只有 0.01% 的电子邮件是垃圾邮件,或者误归档合法电子邮件比将垃圾邮件放入收件箱更糟糕,如果将模型认为至少 50% 的垃圾邮件标记为垃圾邮件,会产生不良结果。

混淆矩阵

概率得分不是现实情况,也不是标准答案。二元分类器的每个输出都有四种可能的结果。在垃圾邮件分类器示例中,如果您将标准答案作为列,将模型的预测结果作为行,则会得到以下表格(称为混淆矩阵):

实际正例 实际负例
预测为正例 真正例 (TP):被正确分类为垃圾邮件的垃圾邮件。这些是系统自动发送到“垃圾邮件”文件夹的垃圾邮件。 假正例 (FP):非垃圾邮件被误分类为垃圾邮件。这些是最终进入“垃圾邮件”文件夹的正常电子邮件。
预测为负 假负例 (FN):垃圾邮件被错误分类为非垃圾邮件。这些是垃圾邮件过滤器未捕获的垃圾邮件,并已进入收件箱。 真负例 (TN):非垃圾邮件被正确分类为非垃圾邮件。 这些是直接发送到收件箱的正规电子邮件。

请注意,每行中的总数表示所有预测正例 (TP + FP) 和所有预测负例 (FN + TN),无论其有效性如何。与此同时,每个列中的总和会显示所有真实正例 (TP + FN) 和所有真实负例 (FP + TN),而不会考虑模型分类。

如果实际正例的总数与实际负例的总数不接近,则表示数据集不平衡。不平衡数据集的实例可能是包含数千个云彩照片,而您感兴趣的罕见云类型(例如卷云云)仅出现几次。

阈值对真正例、假正例和假负例的影响

不同的阈值通常会导致真正例、假正例、真负例和假负例的数量不同。以下视频介绍了具体原因。

请尝试自行更改阈值。

此 widget 包含三个玩具数据集:

  • 分离:正例和负例通常区分明显,大多数正例的分数高于负例。
  • 未分离,其中许多正例的得分低于负例,许多负例的得分高于正例。
  • 不均衡,仅包含少数正类示例。

检查您的理解情况

1. 假设有一个钓鱼式攻击或恶意软件分类模型,其中钓鱼式攻击网站和恶意软件网站属于标记为 1(true)的类别,无害网站属于标记为 0(false)的类别。此模型误将合法网站归类为恶意软件。这叫什么?
假正例
负例(合法网站)被错误地归类为正例(恶意软件网站)。
真正例
真正例是指系统正确地将恶意软件网站归类为恶意软件。
假负例
假负例是指恶意软件网站被错误地归类为合法网站。
真负例
真负例是指被正确归类为合法网站的合法网站。
2. 一般来说,如果提高分类阈值,假正例的数量会怎样?真正例又如何?请使用上方的滑块进行实验。
真正例和假正例都会降低。
随着阈值的提高,模型预测的正例(包括真正例和假正例)总数可能会减少。阈值为 0.9999 的垃圾邮件分类器仅在认为某封电子邮件分类为垃圾邮件的可能性至少为 99.99% 时,才会将某封电子邮件标记为垃圾邮件,这意味着极不可能错误地为合法电子邮件添加标签,但也很可能会错过实际的垃圾邮件。
真正例和假正例都会增加。
使用上面的滑块,尝试将阈值设置为 0.1,然后将其拖动到 0.9。假正例和真正例的数量会怎样?
真正例数量会增加。误报减少。
使用上方的滑块,尝试将阈值设置为 0.1,然后将其拖动到 0.9。假正例和真正例的数量会怎样?
3. 一般来说,如果提高分类阈值,假负例的数量会怎样?真负例呢?请使用上方的滑块进行实验。
真负例和假负例都会增加。
随着阈值的提高,模型总体上可能会预测更多负例,包括真和假。如果设置的阈值非常高,几乎所有电子邮件(包括垃圾邮件和非垃圾邮件)都会被归类为非垃圾邮件。
真负例和假负例都会降低。
使用上面的滑块,尝试将阈值设置为 0.1,然后将其拖动到 0.9。假负例和真负例的数量会发生什么变化?
真负例会增加。假负例减少。
使用上方的滑块,尝试将阈值设置为 0.1,然后将其拖动到 0.9。假负例数和真负例数会发生什么变化?