Machine learning 一种分类预测模型的概率计算

Machine learning 一种分类预测模型的概率计算,machine-learning,deep-learning,classification,bert-language-model,multiclass-classification,Machine Learning,Deep Learning,Classification,Bert Language Model,Multiclass Classification,我有一个分类任务。培训数据有50个不同的标签。客户希望区分低概率预测,这意味着,我必须根据模型的概率(确定性?)将一些测试数据分类为未分类/其他 当我测试代码时,预测结果是一个numpy数组(我使用不同的模型,这是一个经过预训练的数组)。预测数组不包含Keraspredict\u proba()方法中的概率。这些数字是通过预训练模型的预测方法生成的 [[-1.7862008 -0.7037363 0.09885322 1.5318055 2.1137428 -0.2216074

我有一个分类任务。培训数据有50个不同的标签。客户希望区分低概率预测,这意味着,我必须根据模型的概率(确定性?)将一些测试数据分类为
未分类/其他

当我测试代码时,预测结果是一个numpy数组(我使用不同的模型,这是一个经过预训练的数组)。预测数组不包含Keras
predict\u proba()
方法中的概率。这些数字是通过预训练
模型的预测方法生成的

[[-1.7862008  -0.7037363   0.09885322  1.5318055   2.1137428  -0.2216074
   0.18905772 -0.32575375  1.0748093  -0.06001111  0.01083148  0.47495762
   0.27160102  0.13852511 -0.68440574  0.6773654  -2.2712054  -0.2864312
  -0.8428862  -2.1132915  -1.0157436  -1.0340284  -0.35126117 -1.0333195
   9.149789   -0.21288703  0.11455813 -0.32903734  0.10503325 -0.3004114
  -1.3854568  -0.01692022 -0.4388664  -0.42163098 -0.09182278 -0.28269592
  -0.33082992 -1.147654   -0.6703184   0.33038092 -0.50087476  1.1643585
   0.96983343  1.3400391   1.0692116  -0.7623776  -0.6083422  -0.91371405
   0.10002492]]
我正在使用
numpy.argmax()
识别正确的标签。这个预测很有效。然而,由于这些不是概率,我无法将最佳结果与阈值进行比较

我的问题是,如何定义一个阈值(例如,0.6),然后比较预测数组中argmax()元素的概率,以便在概率小于阈值时将预测分类为“其他”

编辑1:

我们使用两种不同的型号。一个是凯拉斯,另一个是贝塔。我们在Keras中没有问题,因为它给出了概率,所以我跳过Keras模型

对Bert模型进行了预训练。以下是它的生成方式:

def model(self, data):
        number_of_categories = len(data['encoded_categories'].unique())
        model = BertForSequenceClassification.from_pretrained(
            "dbmdz/bert-base-turkish-128k-uncased",
            num_labels=number_of_categories,
            output_attentions=False,
            output_hidden_states=False,
        )

        # model.cuda()

        return model
上面给出的输出是
model.predict()
方法的结果。我们比较了两个模型,伯特稍微领先一点,因此我们知道预测效果很好。然而,我们不确定这些数字意味着什么或代表什么


以下是。

BertForSequenceClassification
返回的logits,即标准化之前的分类分数。您可以通过调用
torch.nn将分数标准化。functional
作为
F
导入


由于有数千个标签,规范化的成本可能会很高,如果您只对argmax感兴趣,则不需要它。这可能就是模型仅返回原始分数的原因。

BertForSequenceClassification
返回logits,即标准化之前的分类分数。您可以通过调用
torch.nn将分数标准化。functional
作为
F
导入


由于有数千个标签,规范化的成本可能会很高,如果您只对argmax感兴趣,则不需要它。这可能就是模型只返回原始分数的原因。

您实际上是在问这是否可能,还是一个有效/好的想法?如果是前者,那么这样一个简单的数字操作怎么可能不可能呢?您可以在“帮助”中找到自己答案的最后一部分,谢谢。您提供的示例是关于Keras的。我有两个模型:一个是Keras,另一个是Bert。我已经在使用相同的方法(predmax模型到底是什么?您确定它用于分类吗?请至少发布一些链接到它的文档或其他东西。你真的在问这是否可能,或者这是一个有效/好的主意吗?如果是前者,那么这样一个简单的数字操作怎么可能不可能呢?您可以在“帮助”中找到自己答案的最后一部分,谢谢。您提供的示例是关于Keras的。我有两个模型:一个是Keras,另一个是Bert。我已经在使用相同的方法(predmax模型到底是什么?您确定它用于分类吗?请至少发布一些链接到它的文档或其他东西。