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

多分类任务下sklearn指标计算与XGBoost随机搜索报错求助

多分类任务指标计算报错解决方法

1 前两次准确率计算相关报错原因&解决方案

  • 第一个报错TypeError: accuracy_score() got an unexpected keyword argument 'average'的直接原因:sklearn的accuracy_score接口本身没有average参数,它的计算逻辑天然就是统计所有样本中预测正确的占比,原生支持多分类场景,不需要额外设置平均方式。
  • 去掉average参数后抛出的ValueError: Target is multiclass but average='binary'错误,并非accuracy_score抛出,是你代码中同时调用的f1_score、precision_score、recall_score这类指标抛出的:这类指标默认适配二分类场景,默认配置为average='binary',多分类场景必须手动指定平均策略。

正确的准确率+关联指标计算示例:

from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score

model = RandomForestClassifier(random_state=2)
model.fit(X_train, y_train)
preds = model.predict(X_test)
# 准确率直接调用即可,不需要加average参数
accuracy = accuracy_score(y_test, preds)
# 其他多分类指标需指定对应平均策略
f1 = f1_score(y_test, preds, average='micro')
precision = precision_score(y_test, preds, average='micro')
recall = recall_score(y_test, preds, average='micro')

2 XGBoost超参数搜索阶段报错原因&解决方案

第三个报错TypeError: precision_score() missing 2 required positional arguments: 'y_true' and 'y_pred'的核心原因是:你给make_scorer传入的是已经被调用的指标函数结果,而非函数本身,同时除f1之外的其他分类指标也没有配置多分类必需的average参数。
错误写法示例:

# 错误:precision_score加了括号相当于直接调用函数,此时未传入标注和预测结果自然报错
'precision_score': make_scorer(precision_score()),

正确的scorers配置写法:

from sklearn.metrics import make_scorer, f1_score, precision_score, recall_score, accuracy_score

scorers = {
    # 注意:传函数本身不要加括号,多分类需要的average参数作为make_scorer的额外参数传入
    'f1_score': make_scorer(f1_score, average='micro'),
    'precision_score': make_scorer(precision_score, average='micro'),
    'recall_score': make_scorer(recall_score, average='micro'),
    # accuracy_score不需要average参数,直接传函数本身即可
    'accuracy_score': make_scorer(accuracy_score)
}

额外注意:XGBoost的多分类配置需要补全num_class参数,指定你任务的实际类别数,否则也可能出现运行报错:

# 替换n_classes为你实际的分类类别数
xgb_model = XGBClassifier(n_jobs=-1, objective='multi:softmax', num_class=n_classes)

多分类平均策略选择说明

如果不清楚如何选择平均策略可参考:

  • micro:先统计所有类别的TP、FP、FN总数量再计算指标,适合样本不均衡的场景
  • macro:每个类别单独计算指标后直接求算术平均,不考虑类别样本量差异
  • weighted:每个类别单独计算指标后按类别样本量加权平均,是多分类场景最常用的配置
  • None:返回每个类别的单独指标值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:39:01