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

Scikit-learn计算Precision与Recall结果异常,与手动计算不符

可能的原因及解决办法
  • 正类别指定错误:Scikit-learn默认把标签中数值最大的类别当作正类,如果你手动计算时针对的是另一个类别,结果必然对不上。比如你算的是类别0的精确率,但sklearn默认计算类别1的指标,数值自然差异极大。解决方式很直接:在precision_score或recall_score里显式指定pos_label参数,比如precision_score(y_test, y_pred, pos_label=0)。

  • 混淆矩阵行列对应关系搞反:sklearn的confusion_matrix(y_true, y_pred)默认以真实标签为行、预测标签为列,二分类场景下格式为[[TN, FP], [FN, TP]]。如果你手动计算时把预测值当行、真实值当列,TP、FP这些核心计算值就会出错,结果肯定不对,先核对你的混淆矩阵行列对应关系。

  • average参数理解偏差:

    • 如果你手动算的是单个类别的精确率,用'macro'或'weighted'完全是方向错误——这两个参数是计算所有类别的平均指标。比如你手动算出某一类的精确率是0.14,'macro'会把所有类别的精确率求和后除以类别数,'weighted'会按每个类别的真实样本数加权平均,结果自然和单个类别的数值差很远。这种情况应该用average=None返回所有类别的指标,再提取你需要的那个;二分类场景下也可以直接指定pos_label。
    • 多分类场景下,别拿'weighted'或'macro'的结果去对比单个类别的手动计算值,二者完全不是同一维度的指标。
  • 类别不平衡的拉偏作用:如果数据集里大部分是其他类别,只有你关注的目标类别样本极少,用'weighted'参数时,大量其他类别的高指标会把整体结果拉偏。比如你关注的类精确率是0.14,但其他9个类的精确率都是1,加权后的整体结果会接近1,和你的手动计算值完全不符。

内容的提问来源于stack exchange,提问作者Natalia Ziemba-Jankowska

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:45:32