我正在使用多类分类器(支持向量机,通过One-Vs-All)对数据样本进行分类。假设我目前有n
个不同的类。
但是,在我面临的情况中,新数据样本可能属于之前未见过的新类n+1
。
所以我想你可以说我需要一种在线学习的形式,因为在开始时没有适合所有数据出现的明显训练集。相反,我需要SVM动态适应未来可能出现的新类。
所以我想知道我是否以及如何......
确定新的数据样本不太适合现有的类,但应该导致创建新的类。
将新类集成到现有分类器中。
我可以模糊地想到一些可能解决这个问题的方法:
如果没有二进制SVM分类器(因为我在OVA情况下每个类都有一个)预测新数据样本的概率相当高(例如> 0.5),我可以假设这个新数据样本可能代表一个新的类。
我可以为新类训练一个新的二元分类器并将其添加到多类SVM中。
然而,这些只是我天真的想法。我想知道是否有一些“适当的”方法,例如,使用聚类算法查找所有类。
或许我尝试使用SVM的方法甚至不适合这种问题?
非常感谢您的帮助。
答案 0 :(得分:5)
与任何其他机器学习问题一样,如果您没有质量标准,那么您会感到很糟糕。
当人们说“分类”时,他们会在脑海中监督学习:有一些基本的事实可以训练和检查你的算法。如果出现新的类,这个基本事实是模棱两可的。想象一下,一类是“马”,你会看到许多马:黑马,棕马,甚至是白马。突然间你看到一只斑马了。哇!这是一个新的阶级还是一匹不寻常的马?答案取决于您将如何使用您的班级标签。 SVM本身无法决定,因为SVM不使用这些标签,它只生成它们。决定取决于人(或某种决策算法,它知道什么是“好”和“坏”,即有自己的“损失函数”或“效用函数”)。
所以你需要一个主管。但是你怎么能协助这位主管呢?我想到了两个选择:
异常检测。这可以帮助您尽早出现新课程。在您的算法看到第一只斑马之后,它会发出警报:“有一些不寻常的东西!”。例如,in sklearn从随机森林到单类SVM的各种算法可用于检测异常观测。然后你的主管可以看看他们并决定他们是否应该组建一个全新的班级。
<强>聚类即可。它可以帮助您决定拆分类。例如,在第一个斑马之后,你决定不值得一个新的课程。但随着时间的推移,您的算法已累积了数十个图像。因此,如果您在标记为“马”的所有观察上运行聚类算法,则最终可能会得到两个分离良好的聚类。并且由主管决定是否应该将条纹马与普通马匹分离成一个新类别。
如果您希望此决策纯粹是自愿的,那么如果群内平均距离与群集间距离的比率足够低,则可以拆分类。但只有当你有一个良好的距离指标时,它才会运作良好。什么是“好”再次由你如何使用算法以及你的最终目标来定义。