如何在多类分类中拥有“未定义”类别

数据挖掘 分类 多类分类
2021-09-27 01:05:13

我正在尝试按类别(金融、医疗保健、IT 等)对几个网站进行分类。我可以使用网站页面的内容,并使用这些词进行分类。目前,我已经手动分类了一些网站来训练一个朴素贝叶斯模型。

由于我最感兴趣的是高精度(例如分类网站必须属于正确的类别),我想添加一个“未定义”类别,如果网站与其他类别不够接近,则该类别最终会出现. 需要明确的是,如果一个网站没有被分类,对我来说不是问题,如果它被错误分类是一个问题。

是否有允许这样做的算法,或训练“未定义”类别的方法?

我现在最好的猜测是训练像随机森林这样的东西,并定义一个“最低分数”,低于该分数的网站是“未定义的”。

2个回答

绝对可以创建一种强制高精度类标记算法的方法(以召回的自然成本)。更重要的是-您可以(至少)使用任何为预测提供百分比计算的方法来做到这一点,这是绝大多数分类器。正如您所提到的,关键是找到可接受的最小精度值并在该值处削减预测。

如果最小精度是您唯一的约束,并且您的解决方案对召回不敏感(正确分类网站的所有或最高比例),这是一件非常简单的事情。您的一些较低百分比的观察将被分类,但那些更有可能被正确分类。

例如,如果您的 Precision 地板是 70%,那么您的剪裁可能看起来像这样:

在此处输入图像描述

落入绿色部分的观察预测可以归类为正样本,落入红色部分的预测将是未分类的。

这种方法对于朴素贝叶斯来说就足够了。其他一些方法(SVM、梯度提升机等)可能会受益于自定义损失函数定义,您可以在其中定义一个不成比例地惩罚假阳性预测的函数。

就像是:

(是的一世=0)(d=s)(是的一世=1)(d=1)

大号(p)=一世(p一世-是的一世)2dn一世

大号(p)= 损失函数

p一世= 预测的类似然

是的一世= 实际类(0 为负例,1 为正例)

n一世= 观察次数

s= 误报的惩罚参数。

相对于假阴性,会严厉惩罚假阳性。它也可以根据您的需要进行调整,以或多或少地严厉惩罚误报。为了s=.5,函数看起来像:

在此处输入图像描述

请注意,此函数不一定定义您应该采取的方法,而只是一种可能的方法。要创建完全适合您的用例的自定义损失函数,您需要了解误报和误报的相对成本,并相应地自定义函数。

Thomas Cleberg 的方法听起来很合理,但另一种非常简单的方法是显式编码“未定义”类别。这在处理文本数据集时很常见,其中一个词可能是新词或太罕见而无法独立存在。

拥有足够多的网站集合,肯定有一些网站没有被清晰地归入您的类别之一。在最坏的情况下,您可以简单地手动搜索此类网站并扩充您的数据集。这种方法不需要对您训练模型的方式进行任何更改。