如何在分类机器学习算法中发现新的类别?

10

我正在使用一个多类分类器(通过One-Vs-All实现的支持向量机)来分类数据样本。假设我当前有n个不同的类。

然而,在我面临的情况下,新的数据样本可能属于一个n+1类别,这种类别之前没有出现过。

因此,我想说我需要一种在线学习的形式,因为一开始没有适合所有后续数据的明确训练集。相反,我需要SVM动态地适应未来可能出现的新类别。

因此,我想知道如何以及如何...

  1. 确定新的数据样本不太适合现有类别,而应该创建一个新的类别。

  2. 将新类别集成到现有的分类器中。

我可以模糊地想出一些可能解决这个问题的方法:

  1. 如果二元SVM分类器(在OVA情况下,我为每个类都有一个)都没有对新的数据样本预测出相当高的概率(例如> 0.5),那么我可以假设这个新的数据样本可能代表一个新的类别。

  2. 我可以为该新类别训练一个新的二元分类器,并将其添加到多类SVM中。

然而,这些只是我天真的想法。我想知道是否有一种“适当”的方法来解决这个问题,例如使用聚类算法找到所有类别。

或者说,我的尝试使用SVM来解决这种问题甚至不适合这种问题吗?

非常感谢您的帮助。


你想继续使用SVM吗?你所谈论的类别范围是什么? - Mido
不,我并不一定需要坚持使用SVM。我只是在使用它,因为它似乎是最常见的基于核心的算法。我不确定我是否正确理解了你关于类别范围的问题-这些类别可能在十几个或二十个左右的范围内,多达一百个左右的不同类别。 - Oliver
您必须考虑到,您不能在只有一个数据点的类上训练SVM。这意味着,当您发现一个点可能属于一个新类时,您必须等待获得更多接近它的点,然后才能为该类训练分类器。当您开始获得两个无法分类的点,并且它们分别属于不同的类时,问题就出现了。 - Mido
好的,我明白了。那么当最终不清楚你会得到哪些类时,有没有适当/知名的方法来解决这种问题呢? - Oliver
据我所知,目前没有什么解决方案。不过,你的方法看起来不错,但你需要找到一种衡量新未分类点相似度的方法。如果它们中的一组达到了一定数量,你可以开始为该组构建一个分类器。这是为了克服我之前告诉你的问题。 - Mido
1个回答

9

在任何其他机器学习问题中一样,如果你没有一个质量标准,你就会失败。

当人们说“分类”时,他们想到的是有监督学习:有一些对照数据可以用来训练和检查算法。如果新的类别出现了,这个对照数据就变得模糊不清。想象一下,有一个类别叫“马”,你看到很多马:黑马、棕马,甚至是白马。突然间你看到了一匹斑马。哇!它是一个新的类别,还是只是一匹不寻常的马?答案将取决于你如何使用你的类别标签。SVM本身无法决定,因为SVM不使用这些标签,它只产生它们。决策由人类(或某个决策算法)做出,这个算法知道什么是“好”的和“坏”的,也就是说,它有自己的“损失函数”或“效用函数”。

所以你需要一个监督者。但是你如何协助这个监督者呢?有两个选择:

  1. 异常检测。它可以帮助您早期发现新类的出现。在算法首次看到第一只斑马后,它会发出警报:“有些不寻常!”例如,在sklearn中,可以使用从随机森林到一类支持向量机的各种算法来检测异常观测。然后,您的监督员可以查看它们,并决定它们是否应该形成一个全新的类。

  2. 聚类。它可以帮助您决定是否要划分类别。例如,在第一只斑马之后,您决定不值得创建一个新的类别。但是,随着时间的推移,您的算法已经积累了数十张斑马的图像。因此,如果在所有标记为“马”的观察结果上运行聚类算法,则可能会得到两个明显分离的簇。这时,又该由监督员决定是否将有条纹的马和普通马分开成一个新的类别。

如果您希望这个决策是纯自动的,您可以在类之间的平均距离与类内平均距离比率足够小的情况下分割类。但是,如果您一开始没有一个好的距离度量标准,它只会起到很少的作用。而什么是“好”的又取决于您如何使用算法以及您的最终目标是什么。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接