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

手动计算的评估指标与Sklearn函数计算结果不一致问题咨询

问题根因

你遇到的计算结果差异是两个核心配置不匹配导致的:

  • 混淆矩阵返回值顺序理解错误
  • scikit-learn评估函数默认正样本类别与你手动计算的目标类别不匹配

具体原因说明

  1. 混淆矩阵返回顺序错误
    scikit-learn中confusion_matrix(y_true, y_pred).ravel()的返回顺序固定为tn, fp, fn, tp:行对应真实标签,列对应预测标签,默认按标签升序排列,[0,0]位为真负样本TN、[0,1]位为假正样本FP、[1,0]位为假负样本FN、[1,1]位为真正样本TP。你直接将返回值赋值给tp, fn, fp, tn,相当于把四个指标完全错位。
  2. 正样本类别不匹配
    scikit-learn的precision_score、recall_score默认将1作为正类别计算指标,你手动计算时实际是把占绝大多数的0类当作了正类别,两者计算的目标类别完全不同。

验证与解决方法

你输出的混淆矩阵四个值3636933 34156 127 151对应的正确指标为:
tn=3636933, fp=34156, fn=127, tp=151
按sklearn默认正类别为1的规则手动计算:

# 正类别为1的召回率:tp/(tp+fn) = 151/(151+127) ≈ 0.543165,与sklearn输出一致
# 正类别为1的精确率:tp/(tp+fp) =151/(151+34156)≈0.004401,与sklearn输出一致

如果你的业务场景中需要把0作为正类别计算指标,调用评估函数时指定pos_label参数即可:

precision = precision_score(y_test, y_test_pred, pos_label=0)
recall = recall_score(y_test, y_test_pred, pos_label=0)

此时手动计算也需要对应调整为以0类为正样本的指标计算逻辑,结果就会和sklearn输出完全匹配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:09:05