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

为何GridSearchCV用accuracy_score报错,scoring='accuracy'却正常?

GridSearchCV使用accuracy_score报错的原因与解决

问题场景

以下代码在VS Code的Jupyter笔记本中可正常运行:

from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import GridSearchCV

X, y = load_iris(return_X_y=True, as_frame=True)

gs = GridSearchCV(estimator=KNeighborsClassifier(),
                  param_grid=[{'n_neighbors': [3]}],
                  scoring='accuracy')
#                  scoring=accuracy_score)

gs.fit(X, y)

但取消注释scoring=accuracy_score并注释scoring='accuracy'后,会触发TypeError: too many positional arguments错误,同时伴随评分失败、测试分数为nan的警告。

错误原因

GridSearchCV的scoring参数对传入的对象有明确要求:

  • 当传入字符串(如'accuracy')时,sklearn会自动将其映射为适配GridSearchCV的评分器对象,这类评分器的调用签名是scorer(estimator, X, y),能接收模型实例、测试数据、真实标签三个参数,内部会自动用模型预测X的结果,再和y计算评分。
  • 而直接传入accuracy_score函数的话,它的原生签名是accuracy_score(y_true, y_pred, ...),只需要真实标签和预测标签两个核心参数,无法处理GridSearchCV传入的额外的estimator和X参数,因此会触发“参数过多”的类型错误。

解决方法

有两种可行的解决方式:

  1. 使用make_scorer包装accuracy_score,将其转换为符合GridSearchCV要求的评分器:
from sklearn.metrics import make_scorer, accuracy_score
gs = GridSearchCV(estimator=KNeighborsClassifier(),
                  param_grid=[{'n_neighbors': [3]}],
                  scoring=make_scorer(accuracy_score))
  1. 继续使用字符串'accuracy',这是sklearn内置的标准化评分标识,无需额外包装,最简便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:23:11