当前位置: 首页 > news >正文

如何在 Pipeline 中使用 GridSearchCV 进行超参数调优?

文章目录

    • 一、核心规则(必须记住)
    • 二、最简可运行完整代码
    • 三、详细拆解:每一步怎么写?
      • 1. 先给 Pipeline 步骤起名
      • 2. 搜索参数必须用:步骤名__参数
      • 3. 传入 GridSearchCV
    • 四、超常用模板(直接复制)
      • 模板1:分类任务(标准化 + 逻辑回归)
      • 模板2:带特征选择的 Pipeline(进阶)
    • 五、最容易犯的 3 个错误(避坑)
      • 错误1:只写一个下划线
      • 错误2:步骤名写错
      • 错误3:对树模型做不必要的标准化

一、核心规则(必须记住)

在 Pipeline + GridSearchCV 中,参数名写法固定

步骤名称__参数名称
  • 中间是两个英文下划线__
  • 前面是你定义 Pipeline 时起的名字
  • 后面是模型/预处理类的参数

只要写对参数名,剩下和普通 GridSearch 完全一样!


二、最简可运行完整代码

# 1. 导入库fromsklearn.pipelineimportPipelinefromsklearn.preprocessingimportStandardScalerfromsklearn.ensembleimportRandomForestClassifierfromsklearn.model_selectionimporttrain_test_split,GridSearchCVfromsklearn.datasetsimportload_iris# 2. 数据准备X,y=load_iris(return_X_y=True)X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)# ==================== 3. 构建流水线 ====================pipe=Pipeline([("scaler",StandardScaler()),# 步骤名:scaler("rf",RandomForestClassifier())# 步骤名:rf])# ==================== 4. 定义搜索参数(最关键) ====================param_grid={# scaler 步骤:是否开启均值平移"scaler__with_mean":[True,False],# rf 步骤:决策树数量 & 最大深度"rf__n_estimators":[50,100,200],"rf__max_depth":[3,5,None]}# ==================== 5. 网格搜索(自带交叉验证) ====================grid=GridSearchCV(estimator=pipe,# 传入整个 Pipelineparam_grid=param_grid,cv=5,# 5折交叉验证n_jobs=-1,# 全速CPUverbose=1# 打印进度)# 训练grid.fit(X_train,y_train)# ==================== 6. 输出最优结果 ====================print("最优参数组合:",grid.best_params_)print("最优交叉验证得分:",round(grid.best_score_,3))# 最优模型直接预测best_model=grid.best_estimator_print("测试集得分:",round(best_model.score(X_test,y_test),3))

运行结果示例:

最优参数组合:{'scaler__with_mean': True, 'rf__max_depth': 5, 'rf__n_estimators': 100} 最优交叉验证得分:0.967 测试集得分:0.967

三、详细拆解:每一步怎么写?

1. 先给 Pipeline 步骤起名

pipe=Pipeline([("步骤A",预处理1),("步骤B",预处理2),("模型",算法)])

2. 搜索参数必须用:步骤名__参数

例如:

  • StandardScaler 的with_mean
    scaler__with_mean
  • RandomForest 的n_estimators
    rf__n_estimators
  • SVC 的C
    svc__C

3. 传入 GridSearchCV

grid=GridSearchCV(pipe,param_grid,cv=5)grid.fit(X_train,y_train)

四、超常用模板(直接复制)

模板1:分类任务(标准化 + 逻辑回归)

fromsklearn.linear_modelimportLogisticRegression pipe=Pipeline([("scaler",StandardScaler()),("lr",LogisticRegression())])param_grid={"scaler__with_std":[True,False],"lr__C":[0.1,1,10],"lr__max_iter":[100,200]}grid=GridSearchCV(pipe,param_grid,cv=5)

模板2:带特征选择的 Pipeline(进阶)

fromsklearn.feature_selectionimportSelectKBest pipe=Pipeline([("scaler",StandardScaler()),("select",SelectKBest()),# 特征选择("rf",RandomForestClassifier())])param_grid={"select__k":[3,5,8],# 选3/5/8个特征"rf__max_depth":[3,5,7]}

五、最容易犯的 3 个错误(避坑)

错误1:只写一个下划线

# 错误"rf_n_estimators"# 正确"rf__n_estimators"

错误2:步骤名写错

必须和 Pipeline 里的名字完全一致

错误3:对树模型做不必要的标准化

随机森林、XGBoost不需要标准化,可以直接去掉 scaler。


http://www.cnnetsun.cn/news/3390772.html

相关文章:

  • Unity天空盒实战指南:从原理到动态天气系统实现
  • 微信小程序云函数实战:从零到一构建后端逻辑
  • 模板驱动型文档自动化:零代码实现合规PDF批量生成
  • 哈雷摩托车头罩溃缩断裂修复技术:成本仅为更换的零头
  • C++构建高性能期货CTA策略系统:架构、实现与优化
  • RC舵机蓝牙调参技术:从原理到实践的无线PID参数优化方案
  • W25Q256写保护机制深度解析:从状态寄存器到解锁实战
  • <宇将军AI>深度拆解Claude 4.8思维链:透明化推理机制的技术内幕与工程实现
  • Qt信创|联合收割机操作员智能作业管控系统
  • 【SpringBoot篇】登录校验 — JWT令牌的实战进阶:从生成到失效的全链路设计
  • Android Audio音量曲线与分贝映射机制深度解析
  • FPGA之JESD204B接口——链路建立与确定性延迟实战解析
  • MSP430i20xx架构解析:CPU、指令集与低功耗模式实战指南
  • 告别杂乱格式困扰,Gemini 输出的内容粘贴有符号好烦交给 AI 导出鸭
  • 【iOS】优先级反转
  • <宇将军AI>Claude Opus 4.8:AI代码协作的精准革命
  • C++20协程实战:从生成器到异步任务,告别回调地狱
  • 米家72LW-PL30/N1A1立柜空调评测:巨省电与大风口技术解析
  • 深入理解C++ STL算法库:从核心分类到实战应用
  • C++字体库选型指南:从FreeType到HarfBuzz的实战解析
  • Docker部署ClickHouse时序数据库
  • ping命令无效时,我们可以使用工具tcping取而代之
  • C++实现箱线图异常值检测:从算法原理到工程实践
  • ChatGPT Codex与工作模式:AI辅助开发实战指南
  • ChatGPT桌面版:AI工具从网页到工作流的无缝集成变革
  • VC++财务管理系统开发实战:从环境搭建到核心模块实现
  • 突然袭击!Anthropic 发布 Claude 4.8,科技圈彻底炸锅了!
  • 从零到一:配置与解析小程序二维码直达指定页面(实战避坑指南)
  • C++异常处理进阶:从RAII到noexcept的工程实践指南
  • 基于FPGA的车牌识别系统:从算法仿真到硬件部署的实践指南