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