消除分类任务中的低质量预测

数据挖掘 分类 scikit-学习 nlp 文本挖掘 多类分类
2022-03-08 16:35:54

这是有关该问题的一些背景信息。我的目标是将文本分类为某些类别。我只想从模型中获得高质量的预测。如果模型没有信心,我想手动对文本进行分类。

让我们考虑http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html中提供的示例,以便它可以重现。在以下示例中,分类模型经过训练并适合测试文档。其中一份测试文件是——“这到底是什么?”。我知道该模型正在返回概率最高的类。但是,当模型不确定时,我想将文本标记为“无法分类”

from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB().fit(X_train_tfidf, twenty_train.target)

docs_new = ['God is love', 'OpenGL on the GPU is fast', 'what the heck is this?']
X_new_counts = count_vect.transform(docs_new)
X_new_tfidf = tfidf_transformer.transform(X_new_counts)

predicted = clf.predict(X_new_tfidf)

for doc, category in zip(docs_new, predicted):
    print('%r => %s' % (doc, twenty_train.target_names[category]))

输出

'God is love' => soc.religion.christian
'OpenGL on the GPU is fast' => comp.graphics
'what the heck is this?' => soc.religion.christian

预测概率

这是预测的概率。文件 1 和 2 有一些明显的赢家。但是,第三个文档没有。我有大约 100 个课程,我会犹豫设置手动阈值。

clf.predict_proba(X_new_tfidf)
array([[ 0.16297502,  0.03828016,  0.03737814,  0.76136668],
       [ 0.16387956,  0.36874738,  0.2364763 ,  0.23089675],
       [ 0.28288106,  0.17035852,  0.2484853 ,  0.29827513]])
2个回答

对分类概率进行阈值化的替代方法是对报告的最高概率与报告的第二高概率之间的比率设置阈值。例如,阈值 2 可以解释为:“仅保留类别分配的可能性至少是下一个最可能类别的可能性两倍的分类。”

模型置信度是特定领域的。

因此,您可以手动设置阈值。例如,如果 P < .65,则手动分类。

或者,您可以训练第二个机器学习系统来了解特定任务所需的置信水平。