XGBoost:如何设置多类分类的概率阈值

数据挖掘 xgboost 可能性
2022-03-02 19:40:52

我正在使用 XGBoost 对文本数据进行分类。训练数据集中有 3 个不同的类。

classifier = Pipeline([
    ('features', FeatureUnion([
        ('text', Pipeline([
            ('colext', TextSelector('Issue')),
            ('tfidf', TfidfVectorizer(tokenizer=Tokenizer, stop_words='english',
                     min_df=.0025, max_df=0.25, ngram_range=(1,3))),
            ('svd', TruncatedSVD(algorithm='randomized', n_components=300)), #for XGB
        ]))
    ])),
    ('clf', XGBClassifier(n_estimators=300,max_depth=3, learning_rate=0.1)),
#    ('clf', RandomForestClassifier()),
    ])

根据分类结果,将预测概率最高的类分配给数据点。例如,如果 A 类的预测概率为 0.67,则该数据点被分配给该类别(A 类)。

predictionProbability=classifier.predict_proba(X_test)

但是,如果数据点的预测概率在类之间没有太大差异,则要求将数据点分配给“未确定”的第 4 类。例如,如果三个类别的数据点的预测概率是 .32,.33,.35,那么我们可以将其标记为未确定。这样用户就可以查看未确定的类别并将其分配给适当的类。

但我不确定如何设置多类分类问题的截止概率?请让我知道如何确定截止概率。这样我就可以将预测概率小于截止概率的数据点标记为“未确定”

1个回答

您没有在 xgboost 中设置它。它的工作是返回predict_proba. predict做合乎逻辑的事情并告诉你最有可能的课程。

如果您想以不同的方式解释概率,则必须编写代码来执行此操作。这取决于“差别不大”的含义。例如,如果您只是说“最有可能的类是概率 < 0.5”,那么在 numpy 中它类似于np.argwhere(probabilities.max(axis=1) < 0.5). 这些行是未确定的。对于其余部分,预测是该行的 argmax。

当然,这不是何时未确定的唯一定义,因此您需要弄清楚您要实施的规则是什么。您也可以基于熵,而不仅仅是最大类概率。