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

多分类precision、recall、F1计算及交叉验证average参数使用与报错解决

多分类交叉验证评估问题解答

1. 多分类评估指标与average参数说明

多分类场景下核心分类指标的定义:

  • 精确率(Precision):预测为某类的样本中,实际确实属于该类的占比
  • 召回率(Recall):实际属于某类的样本中,被正确预测为该类的占比
  • F1值:精确率和召回率的调和平均值,用于平衡两类指标的表现

多分类指标需要通过聚合规则对每个类别的二分类指标做合并,average参数就是用来指定聚合规则的,常用取值如下:

  • average='micro':先统计所有类别的TP、FP、FN总样本量,再用总样本量计算全局指标。适合类别不平衡、更关注整体预测正确率的场景,会向样本量多的类别倾斜。
  • average='macro':先单独计算每个类别的指标,再对所有类别的指标取算术平均,完全忽略类别样本量差异。适合类别分布均衡、需要平等评估每个类别预测效果的场景。
  • average='weighted':先计算每个类别的指标,再按每个类别的样本占比做加权平均,兼顾类别不平衡问题,是工业场景最常用的聚合规则。
  • average=None:不做聚合,直接返回每个类别的单独指标,需要分析单类表现时使用。

2. 代码报错原因与优化方案

报错根因

  1. TypeError: unsupported operand type(s) for /: 'dict' and 'int':cross_validate返回的scores是字典结构,每个键对应一个指标的5折结果数组,np.mean()无法直接对字典做数值计算,需要逐个提取每个指标的数组再求均值。
  2. 键错误:cross_validate返回的测试集指标会自动添加test_前缀,你自定义的precision指标对应的返回键是test_precision,直接读取scores['precision']会因为键不存在报错。

优化后可运行代码

import numpy as np
import pandas as pd
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import make_scorer, accuracy_score, precision_score, recall_score, f1_score
from sklearn.model_selection import cross_validate

# 此处默认你已经完成数据加载、y标签定义等前置步骤
x = df[header] 
clf = GaussianNB()
      
# 定义多指标评估规则,可按需修改average参数
scoring = {
    'accuracy' : make_scorer(accuracy_score),
    'precision' : make_scorer(precision_score, average='micro'),
    'recall' : make_scorer(recall_score, average='micro'),
    'f1_score' : make_scorer(f1_score, average='micro')
} 
            
# 执行5折交叉验证
scores = cross_validate(clf, x, y, scoring=scoring, cv=5)

# 计算各指标的5折平均结果
mean_scores = {
    'accuracy': np.mean(scores['test_accuracy']),
    'precision': np.mean(scores['test_precision']),
    'recall': np.mean(scores['test_recall']),
    'f1_score': np.mean(scores['test_f1_score'])
}

# 打印格式化结果
print("5折交叉验证平均指标:")
for metric, val in mean_scores.items():
    print(f"{metric}: {val:.4f}")

多分类多指标交叉验证实现逻辑

  1. 首先在make_scorer中为precision、recall、f1等分类指标指定适配多分类的average参数,避免单折计算时触发类型报错。
  2. 调用cross_validate时传入自定义的scoring字典,字典的键为你自定义的指标名称,值为对应的评分器对象。
  3. 拿到交叉验证返回的结果后,通过test_ + 自定义指标名的规则提取对应指标的各折结果数组,再做均值、标准差等统计操作即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:18:03