可以在不归一化为 1 的情况下使用 predict_proba 吗?

数据挖掘 Python scikit-学习 xgboost
2022-02-25 22:03:05

xgboost multi-class classifier用来预测一系列可能失败的事情。我想运行该预测,并报告分类器用probability > 75%. 但是,如果我使用xgb.predict_proba(),则数组中结果的总和为 1。因此,如果有很多事情可能会失败,那么它们在结果数组中的百分比都会很小。

查看predict_proba 代码,我可以看到数组在哪里标准化。但是我不知道如何防止这种情况。

最后,我认为我的代码看起来像这样(除了预先标准化的概率):

probas = xgb.predict_proba(single_element_dataframe)

for class_name in xgb.classes_:
    class_index = np.where(xgb.classes_ == class_name)
    proba = probas[0][class_index]
    if proba > 0:
        print(f"{class_name}: {proba}")

有任何想法吗?

1个回答

目前你正在做多类分类:在 N 个类中找到最有可能的。每个班级C概率表示类的可能性有多大C是针对实例而不是任何其他类这就是概率总和为 1 的原因:在这种情况下,只有一个“正确”类别,因此两个类别不可能都具有高概率。

根据您的描述,您应该使用多标签分类:在 N 个类中找到适用于实例的所有类。在这种情况下,每个班级C概率表示该实例具有类别的可能性C 而不是上课C(即独立于任何其他类)。自然地,结果是概率之和不等于 1,因为它们彼此独立。

注意:多标签分类与为每个类独立训练二元模型完全相同。