我正在研究一个三类分类问题。我使用的分类器是贝叶斯网络,它为我提供了大约 60% 的分类准确度。当我进行两类分类时,区分 0 类和 1 类以及 0 类和 2 类的准确率达到 80%。此外,我在 1 类和 2 类之间的分类准确率只有 60%。我相信在这种情况下进行 3 类分类的最佳方法是将 2 个 2 类分类器以 80% 的准确率结合起来。我想到的是对两个单独的二类分类器的结果使用某种加权平均方案。我过去没有解决过这样的问题,并且在如何实现这个问题上面临着两难境地。在这方面的任何帮助/建议将不胜感激。
结合一类分类器做多类分类
机器算法验证
机器学习
分类
贝叶斯网络
2022-04-01 03:14:08
4个回答
我使用以下任一方法完成了类似的操作:
- (a) 给定三个不同的类(例如 A、B、C),为每个类创建一个输入列。如果样本是 A,则在 A 列中放置“1”,否则为“0” - 使用相同的逻辑对 B 和 C 类执行此操作。上述列将是三个单独的二元分类器(A、B 和 C 的分类器)的目标字段。
(b) 除了任何其他特征之外,将预测输入第三个分类器,一个多类分类器,其目标是三级目标。
- 采用与 1(a) 相同的方法,采用预测并使用基于规则的逻辑(或错误分类成本)来分离类别预测 - 这是为了避免最终将相同的样本预测为 A 和 B,两者都是 A和 C 等。
直观地进行 0 vs 1 和 0 vs 2 分类的两个分类器应该比必须同时区分所有三个分类器的分类器性能更好。直觉是,在进行 0 vs 1 vs 2 分类问题时,也需要学习为给定样本使用哪个 2 分类器的选择。
我发现可能有帮助的好论文是Fitted Learning: Models with Awareness of their Limits。
它需要一个简单的神经网络,前馈类型,但关键思想是,不是教它预测向量 [0,0,1]、[0,1,0] 或 [1,0,0],而是教它它来预测另一个向量。
您选择一个任意数字(例如 2),然后您需要为每个类别预测的目标遵循一个简单的映射。
[0, 0, 1] -> [0, 0, 0.5, 0, 0, 0.5]
[0, 1, 0] -> [0, 0.5, 0, 0, 0.5, 0]
[1, 0, 0] -> [0.5, 0, 0, 0.5, 0, 0]
这使您可以学习更清晰的分类。我建议仔细阅读这篇论文,看看它是否对您的问题有帮助。
首先,关于术语,您正在考虑使用多个二类分类器,而不是一类分类器。一类分类器是用于异常或新奇检测的一类模型,其中您的数据仅来自单个类。如果您有两个类,则它是一个二类分类器。
您想要做的是多类分类中的一对一策略。Scikit-learn对此类分类器和 API 有很好的文档,允许开箱即用地拟合此类分类器。您不需要进行加权平均,每个单独的分类器都会返回某种分数(通常是概率),因此对于每个类,您将获得该类与其他类的分数,进行预测,您选择得分最高的班级。
我对贝叶斯网络不太熟悉。如果您有兴趣学习加权方案,我会提出一个元线性模型来组合这些输出。
感知器或线性支持向量机在这里可以很好地工作。
其它你可能感兴趣的问题