我们使用机器学习来区分以下五种疾病类别:
- 正常 (N)
- 心肌梗塞 (MI)
- 冠状动脉疾病 (CAD)
- 充血性心力衰竭 (CHF)。
过去,这些疾病仅使用二元分类器进行区分:N 和 MI、N 和 CAD、N 和 CHF。
将多类结果与三个单独的二元分类结果进行比较的最佳方法是什么?
所有情况都可以访问混淆矩阵。
我们使用机器学习来区分以下五种疾病类别:
过去,这些疾病仅使用二元分类器进行区分:N 和 MI、N 和 CAD、N 和 CHF。
将多类结果与三个单独的二元分类结果进行比较的最佳方法是什么?
所有情况都可以访问混淆矩阵。
(就像生活中的一切)这取决于。
通常,一个人(一个样本)可以在多个类中。您确实有一组 3 个已知的二元分类器,这些被理解为我们可以提出问题的三个模型:
MI吗?CAD吗?CHF吗?从上面不明显的是(忽略任何身体限制 - 我不期望心脏病)一个人可能有MI,CAD并且CHF立即。或者一次只有两个,或者只有一个,或者一个都没有。
如果你构建一个分类器,它会说一个人有:MI OR CAD OR CHF OR nothing ( N); 那么二元分类器无法与新分类器进行比较,因为三个分类器产生的结果集与多类分类器不同。但并非一切都丢失了,让我们尝试几个可以探索的选项:
如果有人可以争辩说某人在物理上不可能有两个:MI,CAD或者CHF一次,那么我们可以比较分类器。请注意,这是一个需要在 ML 过程之外进行证明的假设:例如,疾病的定义可能会排除同时患有这些疾病的可能性。
在这种情况下,我们需要处理多个二元分类器可能为同一样本输出正类的情况。例如,如果MI和CAD分类器都输出样本的正类,那么我们需要选择MI或CAD作为真正的分类。大多数二元分类器可以输出(或至少估计)类概率,可以使用这些概率来决定获胜分类器(具有更高概率的输出)。
(注意:如果分类器是彼此不同的模型类型,它们可能需要概率校准,但这超出了这个答案。)
通过此过程,您可以为数据集中的所有样本提供一组简单的 4 个类( N、MI、CAD、 )。CHF您可以使用此集合与多类分类器的输出进行比较。
在这种情况下,多类分类器不是对四个类进行分类,而是需要对八个类进行分类(N、MI、CAD、CHF、MI+CAD、MI+CHF、CAD+CHF、MI+CAD+CHF)。
为这些类别中的每一个找到样本可能很困难(而且您可能根本找不到其中一些类别的样本)。此外,您将需要重建模型以包含更多类。
另一方面,这是使用多类和多标签分类器的完美案例。多个模型可以一次预测多个类别,而不是创建八个类别(这可能是不平衡的)。值得注意的是,决策树(和森林)和神经网络擅长多类和多标签分类。
如果您可以进行多标签分类,您将有矩阵作为模型的输出,例如对于一些 6 个样本,您可能会得到:
MI CAD CHF
0 0 0
1 0 0
1 1 0
0 0 1
0 1 1
0 0 0
这可以直接与相同 6 个样本上的所有三个二元分类器的输出进行比较。
如果你选择 8 个类(我强烈建议不要这样做——处理非常不平衡的类总是很痛苦),你可以直接将二进制分类器的输出与结果列表进行比较。(例如,类MI+CAD意味着第一个和第二个二元分类器确实为样本输出了一个肯定的结果)。
PS 为什么更喜欢多标签分类器而不是手动构建类?多标签分类器允许一个人同时预测多个类,它们确实作为一个“新类”工作,但它们将其作为决策算法的一部分来执行。根据经验,多标签分类器不太可能通过添加这个“新类”作为现有类的组合来影响其他类的可分离性。如果算法(或超参数)基于它们的(低)支持(类中的元素数量与样本总数)对类进行加权,则手工构建的新类可能会影响其他类的可分离性。