结合具有不同精度和召回值的分类器

数据挖掘 机器学习 分类 合奏
2022-01-19 13:17:22

假设我有两个二元分类器AB两者都在相同的数据集上进行训练,并对不同的(但对于两个分类器相同)数据集产生预测。A的精度高,召回率低,而B的精度低,召回率高。有没有办法将这两个模型结合起来,我可以从一个模型中获取精度并从另一个模型中进行召回,或者可能使用其中一个模型的指标来改进另一个模型?

例如,假设这些是指标:

一种

精度:0.91

召回:0.35

精度:0.44

召回:0.90

由于这些是二元分类器,我的标签是 1 和 0,我感兴趣的类别是 1(所以上面的指标是用于预测 1)。

假设模型A预测 10 个 1,模型B预测 70 个 1。

我可以肯定地说,在模型A预测的 10 个 1 中,有 9 个是真阳性。

我也可以肯定地说,在模型B预测的 70 个 1 中,60% 是假阳性,但其余的是数据集中 90% 的真阳性。

我的问题是,我有什么方法可以将这些结果结合起来,以便我可以从数据集中获得所有 50 个真阳性吗?

2个回答

你想集成你的两种算法。做到这一点的方法不仅仅是使用例如 sklearn 的精度和召回指标函数,而是实际获得积极的概率(大多数模型可以通过简单的函数调用输出它),并取两个概率之间的平均值(或更多)二元分类器。然后,测试一系列概率阈值,超过这些阈值您可能会标记为阳性,并评估对召回率和准确率的影响。这是一种通过利用不同预测算法的优势来获得更好结果的非常常见的方法。

只是一些pythonic伪代码来演示:

recall = []
precision = []
for threshold in [0.1, 0.2, 0.3, ..., 0.9]:
    df_of_mean_probabilities['label'] = df_of_mean_probabilities > threshold
    recall.append(TP/(TP + FN))
    precision.append(TP/(TP + FP))

您真正要寻找的是微观和宏观精度和召回率。

如果您直接计算精度和召回值,那么可能只有 Macro Precision 和 Macro Recall。

宏公式如下:

Macro_Precision = (Precision1 + Precision2) / 2

Macro_Recall = (Precision1 + Precision2) / 2

但是,如果您有更精细的细节,例如 True Positives 和 False Positives,那么您甚至可以计算 Micro Precision 和 Micro Recall。他们的公式如下:

Micro_Precision = (TP1 + TP2) / (TP1 + TP2 + FP1 +FP2)

Micro_Recall = (TP1 + TP2) / (TP1 + TP2 + FN1 + FN2)

微观和宏观有其各自的意义,当您想要深入了解粒度级别时,您可以使用微观,这在数据集不平衡的情况下会有所帮助。