最小化误报错误的二元分类器

人工智能 神经网络 分类
2021-10-28 01:16:49

我有一个二元分类问题,与误报错误相比,误报错误的成本非常高。

有没有办法为此类问题设计分类器(最好是实现算法)?

4个回答

任何问题都没有预定义的分类器。分类器的两个主要特征是

  • 它的成本函数和
  • 其对应的权重更新公式。

由于您的问题陈述需要巨大的成本来错误地对特定类进行分类,因此一种方法将是。

  • 您必须定义一个成本函数,该函数仅会因为对该类的错误分类而受到巨大的惩罚。所以你的成本函数将是JJ放在一起。您可以在此处查看逻辑分类器的成本函数,以了解两个单独的成本函数是如何合并在一起的

  • 第二种方法可以是(假设您使用的是监督学习),学习率α因为这两个类应该是不同的。较大的学习率将用于更重要的类别,因为您不想对其进行不正确的分类(增加α与其他类别相比将减少或错误分类的风险)。确切的学习率取决于具体情况。

因此,我定制了分类器的两个主要功能来解决这个问题:

  • 成本函数。

  • 权重更新方案(通过改变不同情况的学习率)。

@DuttaA 几乎提到了拥有此设施的两种最合适的方法。误报的惩罚应该很高,或者正确类别的学习率应该很高。

我将举两个现实生活中的例子来帮助你更好地理解它。

假设您必须教导青少年滥用药物对健康有害(例如,经常吸烟是一种负面习惯)。但青少年最终从药物的高效果中了解到它是好的(假阳性)并沉迷于它。您将严格希望避免这种情况(误报错误与误报错误相比具有非常大的成本)。

一般来说,为了对成本不同的情况进行建模,我们描绘了一个成本矩阵。对于二分类问题,成本矩阵如下所示:

成本矩阵 (礼貌:http ://albahnsen.com/CostSensitiveClassification )

现在,在设计成本函数时,您需要考虑与每种情况对应的权重。一个简单的python代码如下:

def weighted_cost(pred, act):
    if pred==P and act==P:
        return C_TP * cost(pred, act)
    if pred==P and act==N:
        return C_FP * cost(pred, act)
    if pred==N and act==P:
        return C_FN * cost(pred, act)
    if pred==N and act==N:
        return C_TN * cost(pred, act)

其中,pred是预测类,act是实际类。这里,C_TP、C_FP、C_TN、C_FN表示真阳性、假阳性等的权重。cost (pred, act)函数将计算一个训练样例的损失。您可能希望在一个训练示例之后使用 weighted_cost 函数来查找损失。

@DuttaA 提到的第二种方法是改变学习率。在现实生活中,当您被要求多次写一个单词时,如果您忘记了它的拼写,您可以将其与这种情况联系起来,以便您更好地记住它。在某种程度上,你学会了这个词的正确拼写。

在这里,增加一个类的学习率(比如 4 x alpha)的值可以看作是用旧的学习率(alpha)多次 (4 次)更新权重的值,类似于我们通过编写多次正确拼写单词。所以,一个更重要的类(在你的情况下是Negative Class)应该被赋予更多的 alpha,因为误报(负类的错误分类)有很高的惩罚。你通过学习更多次来学会识别正确的(否定的)类(就像学习单词的拼写一样)。

如果您需要任何进一步的说明,请告诉我。

以较少开销执行此操作的一种时髦方法是在某种程度上过度拟合数据。原因是当您尝试使用分类器过度拟合数据时,分类界限往往会非常紧密地围绕集群,并且使用该模型您有时可能会错过将正类分类为负类(由于高方差)但相对较少您最终会错过将负类分类为正类的情况。需要执行的过拟合程度仅取决于您的 FP 和 FN 权衡。

我不认为这是一个永久性的修复,但在某种程度上可以派上用场。

还有一个想法——我记得在我的学习中学习过 Neyman-Pearson 任务。它是一种用于二进制分类问题的统计学习方法,其中被忽视的危险(假阴性错误)是非常不希望的。

您为假阴性错误率设置一个所需的阈值,然后最大限度地减少假阳性错误。您只需要测量每个类的条件概率。它可以表示为一个线性程序并求解以获得您选择的阈值的最佳策略。