【问题标题】:How to discover new classes in a classification machine learning algorithm?如何在分类机器学习算法中发现新类?
【发布时间】:2016-03-19 04:18:18
【问题描述】:

我正在使用多类分类器(支持向量机,通过 One-Vs-All)对数据样本进行分类。假设我目前有 n 不同的类。

但是,在我面临的情况下,新的数据样本可能属于以前从未见过的 newn+1

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

所以我想知道我是否以及如何...

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

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

我能隐约想到一些可能是解决这个问题的方法:

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

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

然而,这些只是我幼稚的想法。我想知道是否有一些“正确”的方法来代替,例如使用聚类算法查找所有类。

或者也许我尝试使用 SVM 的方法甚至不适用于此类问题?

非常感谢您的帮助。

【问题讨论】:

  • 你想坚持使用 SVM 吗?您所说的课程范围是什么?
  • - 不,我不一定需要坚持使用 SVM。我只是在使用它,因为它似乎是最常见的基于内核的算法。 - 不确定我是否正确理解了您关于课程范围的问题 - 这些课程可能在十几个或两个到一百个不同的课程范围内。
  • 您必须考虑到您无法在具有单个数据点的类上训练 SVM。这意味着当你找到一个可能属于一个新类的点时,你必须等到获得更多接近它的点,然后才能为该类训练分类器。当您开始获得两个无法分类的点时,问题就出现了,每个点都属于不同的类别。
  • 好的,我明白了。那么,当不清楚最终会得到哪些类时,是否有任何适当/众所周知的方法来解决这类问题?
  • 我一无所知。但是,您的方法看起来不错,但您必须找到衡量新未分类点的相似性的方法。如果其中一组达到一定数量,您可以开始为该组构建分类器。这是为了克服我告诉你的问题。

标签: machine-learning classification svm


【解决方案1】:

与任何其他机器学习问题一样,如果你没有质量标准,那你就糟透了。

当人们说“分类”时,他们想到的是监督学习:您可以根据一些基本事实来训练和检查您的算法。如果可以出现新的类,那么这个基本事实是模棱两可的。想象一类是“马”,你会看到很多马:黑马、棕马,甚至是白马。突然你看到一匹斑马。哇!它是一个新班级还是只是一匹不寻常的马?答案将取决于您将如何使用您的类别标签。 SVM 本身无法决定,因为 SVM 不使用这些标签,它只生产它们。决定权在于人(或由某种决策算法知道什么是“好”和“坏”,即有自己的“损失函数”或“效用函数”)。

所以你需要一个主管。但是你怎么能帮助这个主管呢?我想到了两个选项:

  1. 异常检测。这可以帮助您尽早出现新课程。在您的算法看到第一条斑马之后,它会发出警报:“有一些不寻常的东西!”。例如,in sklearn 从随机森林到一类 SVM 的各种算法都可以用来检测不寻常的观察结果。然后你的主管可以查看他们并决定他们是否应该组建一个全新的班级。

  2. 集群。它可以帮助您做出关于分班的决定。例如,在第一只斑马之后,您认为不值得创建一个新课程。但随着时间的推移,你的算法已经积累了几十张他们的图像。因此,如果您对所有标记为“马”的观察结果运行聚类算法,您最终可能会得到两个分离良好的聚类。是否应该将条纹马从普通马中分离出来进入一个新的类别,这将再次由主管决定。

如果您希望这个决定是完全自动的,如果集群内平均距离与集群间距离的比率足够低,您可以拆分类。但只有当你首先有一个好的距离度量时,它才会很好地工作。什么是“好”又取决于您如何使用算法以及您的最终目标是什么。

【讨论】:

    猜你喜欢
    • 2012-03-14
    • 2018-09-05
    • 1970-01-01
    • 2021-08-23
    • 2016-10-09
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    相关资源
    最近更新 更多