You need to enable JavaScript to run this app. 多类不平衡分类任务中K折交叉验证配置f1/召回/精确率评分的报错问题
优惠活动
大模型
产品
解决方案
定价
更多

多类不平衡分类任务中K折交叉验证配置f1/召回/精确率评分的报错问题

报错核心原因
  • 触发ValueError: Target is multiclass but average='binary'的本质:sklearn内置的字符串打分值'f1'是专门给二分类场景设计的,内部固定使用average='binary'参数计算F1值,碰到4类多分类任务自然会触发参数校验错误。
  • 触发TypeError: cross_val_score() got an unexpected keyword argument 'average'的本质:这是典型的参数边界混淆——average是f1_score()指标函数的专属入参,不属于cross_val_score()接口的可接收参数范围,直接传入会被识别为非法关键字参数。
适配多分类不平衡场景的正确实现

方式1:直接使用多分类专属的内置打分字符串

针对加权平均F1的需求(适配类别不平衡,按各类样本占比加权计算最终F1,不会被小样本类别的计算结果干扰),直接替换scoring的参数值即可,无需额外传参:

accuracies = cross_val_score(
    estimator = classifier_RF,
    X = X_train,
    y = Y_train,
    cv = 10,
    scoring = 'f1_weighted'
)
print("加权F1_Score: {:.2f} %".format(accuracies.mean()*100))
print("标准差: {:.2f} %".format(accuracies.std()*100))

其他可选的多分类F1打分值参考:

  • f1_micro:全局汇总所有类别的真阳性、假阳性、假阴性结果计算F1,不区分类别
  • f1_macro:先计算每个独立类别的F1值,再取算术平均,不考虑不同类别的样本量差异
  • f1_weighted:按每个类别的样本占比对单类F1值加权计算,最适合当前4类不平衡数据集的评估需求

方式2:自定义打分器绑定自定义参数

如果需要给F1计算设置额外规则(比如设置zero_division=0避免小类别在某一折交叉验证中无样本时触发除零警告),可以通过make_scorer提前把参数绑定到打分逻辑上,再传入交叉验证接口:

from sklearn.metrics import make_scorer, f1_score

# 提前固定F1计算的参数规则
custom_f1_scorer = make_scorer(
    f1_score,
    average='weighted',
    zero_division=0
)

accuracies = cross_val_score(
    estimator = classifier_RF,
    X = X_train,
    y = Y_train,
    cv = 10,
    scoring = custom_f1_scorer
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 00:06:04