如何创建一个赋予特定分类器优先级的集合

数据挖掘 分类 预言 集成建模 二进制 合奏
2021-09-19 17:16:35

假设在二元分类任务中,我有单独的分类器ABC如果我A单独使用,我将获得高准确率,但召回率低。换句话说,真阳性的数量非常多,但它也错误地将其余标签标记为FalseB,并且C精度要低得多,但单独使用时,它们可能(或可能不会)导致更好的召回率。如何定义一个集成分类器,该分类器A仅在将数据标记为的情况下赋予分类器优先级,并在将标签True预测为 时给予其他分类器的预测更多权重AFalse

这个想法是,A在捕捉真阳性方面已经优于其他人,我只想在不影响精确度的情况下提高召回率。

3个回答

特征加权线性堆叠可能是您正在寻找的。

FWLS 使用本身是元特征的线性函数的系数线性组合模型预测。

在您的示例中,您可以使用元功能“是否A将示例标记为True?”

根据您的描述,看起来不同的模型有不同的偏见。两个重要问题:您有任何数据不平衡问题吗?你使用什么样的模型?如果您有不同的偏见,使用基于堆叠的分类器是有益的。尝试使用简单的基于堆栈的分类器。对于您的 1 级分类器,请使用不同的模型(例如 SVM-L、SVM-NL、DT、RF 等)。对于您的元数据,使用概率,对于元分类器,使用随机森林。

如果您遇到数据不平衡问题,则使用基于堆栈的分类器更具挑战性。

如何定义一个集成分类器,仅在将数据标记为 True 并在 A 将标签预测为 False 时给予其他分类器的预测更多权重的情况下,才优先考虑分类器 A

因为,您的依赖取决于您的预测而不是标签。
最好和最简单的方法是手动进行 -
1. 创建 3 个模型
2. 使用所有 3 个进行预测
3. 调用函数来调整分类器权重
4. 调用加权预测

###Pseudo-code

def cust_wt(p_a, p_b, p_c):
    if (p_a > THRESHOLD):
        weights = 60:20:20
    else:
        weights = 20:40:40

    my_actual_predict(weights) ##Call the voting Classifier


您可以使用 Sklearn 的不同权重分类的投票。
投票分类器