You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python文本分类准确率等指标测量不一致问题求助

NLTK电影评论语料库分类指标异常问题解决

问题原因与对应解决办法

1. shuffle后指标每次结果不同

  • 原因:random.shuffle会随机打乱数据集顺序,默认每次运行的随机序列不固定,导致训练/测试集的样本组成每次都有差异,模型指标自然波动。
  • 解决:在shuffle前设置固定随机种子,强制每次打乱结果一致,代码示例:
    random.seed(42)  # 42为常用固定种子值,可替换为任意整数
    random.shuffle(documents)
    
    也可多次运行程序取指标平均值,评估模型稳定性能。

2. 删除shuffle后精确率0.0、召回率None

  • 原因:原始documents构造逻辑是先遍历所有**neg(负面)评论,再遍历所有pos(正面)**评论,未shuffle时前1000条全是neg,后1000条全是pos。你的代码测试集取featuresets[:300],即全是neg样本:
    • 测试集无pos样本,refsets['pos']为空集合;模型在全neg测试集上不会预测pos,testsets['pos']也为空。
    • nltk的precision计算时分母(预测为pos的样本数)为0,返回0.0;recall计算时分子(正确预测的pos样本数)和分母(真实pos样本数)均为0,返回None。
  • 解决:必须保留shuffle,确保训练/测试集均包含正负样本,避免单一类别样本情况。

3. 调整训练/测试集范围后指标正常但测试集包含训练集

  • 原因:训练集设为[500:1500]、测试集设为[:1500],等于测试集包含了训练集的全部样本,属于数据泄露——模型训练时已见过测试集部分数据,指标无法反映真实泛化能力,毫无参考价值。
  • 解决:严格划分无重叠的训练/测试集,比如保留原本的划分逻辑但保留shuffle:
    train_set, test_set = featuresets[300:], featuresets[:300]
    
    shuffle后该划分会包含随机分布的正负样本,既避免类别单一,也不会出现数据泄露。

额外验证建议

可添加代码查看测试集类别分布,确保正负样本均存在:

print(collections.Counter(label for _, label in test_set))

输出类似Counter({'neg': 152, 'pos': 148})即说明分布正常,可正常计算精确率、召回率等指标。

内容的提问来源于stack exchange,提问作者Iwakura Lain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:28:28