我正在寻求您对分类问题的意见和/帮助。如果有人有任何引用资料,我可以阅读以帮助我更好地解决我的问题。
我有一个由四个离散且分离良好的类组成的分类问题。然而,我的输入是连续的并且具有高频(50Hz),因为它是一个实时问题。
圆圈代表类别的集群,蓝线代表决策边界,类别 5 等于(中性/静止不执行任何操作类别)。该类是被拒绝的类。然而问题是,当我从一个类别移动到另一个类别时,我在过渡运动中激活了很多误报,因为该运动显然是非线性的。 例如,每次我从 5 类(中性类)转到 1 类时,我首先会看到很多 3,然后再转到 1 类。
理想情况下,我希望我的决策边界如下图所示,其中被拒绝的类别为 Class =5。具有比其他类别更高的决策边界,以避免过渡期间的错误分类。我目前正在 Matlab 中使用朴素贝叶斯、kNN 和 SVM 优化算法在 Matlab 中实现我的算法。
问题:处理弃权/拒绝类(class)的最佳/常见方法是什么?我应该使用(模糊逻辑,损失函数,我应该在训练中包括静止簇)吗?
最佳答案
如果您熟悉 Boosting,可以尝试 AdaBoost.MH,但弃权。在 AdaBoost 的常规版本(对于二元分类任务)中,每个弱分类器输出一个 +1 或 -1 的标签。在弃权的版本中,每个弱分类器都可以通过预测0来“弃权”,这允许弱分类器说“我不知道”。通过将每个实例分解为多个二元分类问题,可以将相同的想法扩展到多类问题。
就您的情况而言,您可以将类别 5 映射到“弃权”预测。
在分解之前,假设您的训练实例如下所示:
x1 -> 1
x2 -> 5
分解后,您的训练实例如下所示:
x1 -> 1 (predicting +1)
x1 -> not 2 (predicting -1)
x1 -> not 3 (predicting -1)
x1 -> not 4 (predicting -1)
x2 -> abstain (predicting 0)
x2 -> not 1 (predicting +1)
x2 -> not 2 (predicting +1)
x2 -> not 3 (predicting +1)
x2 -> not 4 (predicting +1)
在每次提升迭代中,您将从训练实例中选择一个特征,并构建一个弱学习器(决策树桩),以最小化预测损失并更新与每个训练实例相关的权重。 “x2 -> Abstain”不会通过预测 0 来影响预测损失,但是所有其他分解的训练实例(如“x2-> not 1”、“x2-> not 2”等)仍然有助于系统识别负数将实例分类为 1 到 4 时 x2 的效果。
Here是包含 AdaBoost 与弃权思想的经典论文:
Robert E. Schapire、Yoram Singer 使用置信度预测改进了增强算法。
This是另一篇论文,其中包含有关弃权的 AdaBoost.MH 的更多详细信息以及在文本分类中的应用。
关于matlab - 分类:处理弃权/拒绝类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17393837/