具有未见类的半监督分类

机器算法验证 分类 半监督学习
2022-03-20 16:24:41

考虑以下问题。您有一个大型数据集,其中一些小子集具有来自 A、B 和 C 类的标签。我想对未标记的项目子集进行分类,每个项目都可以来自 A、B 和 C 类,或者(至关重要)也来自其他类我还没有看到任何标签。

理想的结果是使用 A、B、C、D、E 等类别对未标记子集进行完整标记。

这是半监督分类的一个例子吗?有什么好的方法可以解决这类问题?

4个回答

看看one-class-classifiers这些分类器可以告诉您新对象与您的训练数据不一致。

我会在你的所有数据上训练一个常规的多类分类器和一个类分类器如果一个新实例被单类分类器拒绝,让用户将其分配给现有类之一;或者让用户分配一个新的类。然后更新您的分类器。

这是一个非常有趣的框架。

构建一对多分类器将帮助您识别 A、B、C 和“其他”。但是,在“其他”中,D、E 和其余部分之间将无法区分。

我认为您应该对数据进行聚类以识别未知类的聚类。如果您手头有一个距离函数,您可以评估它对已知类的分离程度。但是,您实际上可以学习适当的距离函数。

让 L 成为您的标记数据集。为 L 中的所有对 x,y 构建一个对数据集。让对数据集的概念为所需的距离。如果class(x)=class(y),距离应该为零。如果类别不同,则需要距离的领域问题(例如,A 和 B 之间的距离可能小于 B 和 C 之间的距离)。

现在在对数据集上训练一个回归器。

使用回归器作为聚类算法的距离函数。 层次聚类算法似乎很适合您的需求。

对未标记的数据运行聚类算法以获得样本聚类。如果您还有来自已知类的一对多分类器,请在样本上运行它们。样本往往不属于已知类别的集群是新类别的候选者。

我会将其视为一组半监督的一对多分类问题,即通过将其已知实例视为正例,将具有不同已知标签的实例视为负例,为每个已知目标类构建一个二元半监督分类器(如果类是互斥的),其余为未标记。在学习过程中结合未标记实例的一种常见且有效的方法是将它们视为具有非常低的错误分类惩罚的负数(远低于已知的负数)。

被所有结果分类器拒绝的未标记实例很可能是您没有标签的某个类的一部分。随后的步骤可能是对所有这些未分类的实例进行聚类,以尝试确定您没有标签的类的数量,尽管这远非易事。

如果没有其他组 D、E 等的示例原型,可能需要也可能不需要将它们标识为独立集群。如果数据可以通过高斯混合模型之类的东西很好地建模,那么拟合良好的模型可能确实涉及对这些额外组的识别。然而,这些方法在本质上基本上是无监督的......除了播种集合之外,几乎不需要或使用您拥有的 A、B、C 原型。

另一种方法是使用标记的数据集调整分类模型,然后将其应用于未标记的集合以获得预期的分类。定义不确定性阈值,并使用未分类低于它的项目来播种新的项目集合 - 这是您未知的新类别。使用这些新种群重新训练您的分类器。这种方法通常被称为K-Means和高斯混合模型中的期望最大化算法,但一般逻辑也可以使用神经网络或随机森林作为分类引擎来实现。如果您需要在新识别的类别中识别类别结构,则需要使用无监督技术,例如聚类。

识别新类别的另一种方法是某些“单类”分类器,其目的是识别群体异常值。例如,单类 SVM。我还尝试了单类决策树。但是,此类方法不会使用您拥有的大部分数据,我也不希望有更好的结果。