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

在sklearn GridSearchCV中获取Pipeline默认与自定义评估得分的正确方法

在sklearn Pipeline网格搜索中同时获取默认评分与自定义评分的正确方法

问题原因

你之前用make_scorer(pipe.score)返回nan,核心原因是未拟合的Pipeline实例的score方法无法直接作为评分函数使用。pipe.score要求模型先完成拟合才能计算得分,而GridSearchCV的scorer需要接收(y_true, y_pred)或(estimator, X, y)类型的参数,直接传入未拟合的pipe.score会因模型未训练而返回无效值。

正确实现方式

不需要直接调用未拟合Pipeline的score方法,而是通过以下两种方式指定默认评分:

1. 使用内置评分指标的字符串名称

sklearn为分类、回归等不同任务提供了内置评分名称,比如分类任务默认的accuracy、回归任务的r2,这些名称会自动对应Pipeline最后一个estimator的默认score逻辑。

2. 使用对应指标函数创建scorer

如果需要更灵活的控制,可以用make_scorer结合sklearn内置的指标函数(比如accuracy_score、r2_score)创建scorer,效果和使用字符串名称完全一致。

完整代码示例

以分类任务为例:

from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import accuracy_score, make_scorer

# 自定义评分函数示例
def my_scoring_func(y_true, y_pred):
    # 这里可以编写你的自定义逻辑,比如加权准确率
    return accuracy_score(y_true, y_pred) * 1.2

# 构建Pipeline
pipe = Pipeline([
    ('clf', SVC())
])

# 超参数搜索网格
param_grid = {'clf__C': [0.1, 1, 10], 'clf__kernel': ['linear', 'rbf']}

# 配置GridSearchCV,同时指定两种评分
grid_search = GridSearchCV(
    estimator=pipe,
    param_grid=param_grid,
    scoring={
        # 对应Pipeline默认的评分(SVC的score默认是accuracy)
        'default_score': 'accuracy',
        # 自定义评分
        'custom_score': make_scorer(my_scoring_func)
    },
    refit=False,  # 若不需要基于某一评分重新拟合最佳模型,设为False;需要则指定对应key,比如refit='default_score'
    cv=5,
    verbose=1
)

# 拟合数据集(替换成你的X和y)
# X, y = ...
# grid_search.fit(X, y)

# 查看交叉验证结果
# print(grid_search.cv_results_['mean_test_default_score'])
# print(grid_search.cv_results_['mean_test_custom_score'])

关键说明

  • 如果你不确定当前任务对应的默认评分指标,可以查看Pipeline最后一个estimator的官方文档,或者用sklearn.metrics.get_scorer_names()获取所有可用的内置评分名称。
  • 当scoring参数传入字典时,cv_results_会包含每个评分对应的结果字段(比如mean_test_default_score、mean_test_custom_score)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:50:25