如何使用Python NLTK的朴素贝叶斯算法获取单文本分类结果的正确概率
解决方案
NLTK 内置的NaiveBayesClassifier类自带概率查询接口,不需要额外修改模型训练逻辑,只需要替换原来的分类调用方法即可:
核心原理
你当前用的classifier.classify()方法只输出概率最高的类别,调用classifier.prob_classify(输入特征)会返回完整的类别概率分布对象,可直接查询每个类别的置信度。
代码修改示例
替换你原代码末尾的分类调用部分即可:
# 优化后的文本预处理函数,和训练阶段逻辑对齐,避免概率偏差 def form_sent(sent): # 分词+转小写,和训练时预处理一致 words = word_tokenize(sent.lower()) # 过滤停用词和特殊符号,和训练逻辑对齐 filtered_words = [word for word in words if word not in stop_words] return {word: True for word in filtered_words} text = form_sent("Quando estiver concluído, o Rodoanel terá 174 quilômetros de extensão, interligando dez rodovias. O governador Alckmin tem demonstrado que é possível construir e preservar o meio ambiente, como foi feito, por exemplo, na nova pista da Imigrantes. Processos técnicos muito modernos impediram que as águas drenadas durante as escavações contaminas sem os córregos da região.") # 获取概率分布对象 prob_dist = classifier.prob_classify(text) # 原分类结果(和classify方法输出完全一致) a = prob_dist.max() # 获取对应类别的概率值 pos_prob = prob_dist.prob("pos") neg_prob = prob_dist.prob("neg") # 输出结果示例 print(f"最终分类结果:{a}") print(f"分类为正面的概率:{pos_prob:.2%}") print(f"分类为负面的概率:{neg_prob:.2%}")
注意事项
如果不优化form_sent的预处理逻辑,会因为训练和预测时的特征提取规则不一致,导致输出的概率值存在偏差,建议保持训练、预测两个阶段的预处理逻辑完全统一。
内容的提问来源于stack exchange,提问作者Luís Henrique Martins
相关产品推荐
相关产品推荐

