news 2026/6/5 21:18:10

Iridescent:Day23

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Iridescent:Day23

https://blog.csdn.net/weixin_45655710?type=blog
@浙大疏锦行

DAY 23 pipeline 管道
知识回顾:
1.转化器和估计器的概念
2.管道工程
3. ColumnTransformer和 Pipeline类
作业:
整理下全部逻辑的先后顺序,看看能不能制作出适合所有机器学习的通用 pipeline

好的,这是一个非常重要的复习内容!理解PipelineColumnTransformer的逻辑结构,是掌握现代 Scikit-learn 和防止数据泄露的关键。

针对您的作业,我为您整理了当前信贷数据集的代码逻辑顺序,并提出了一个通用的机器学习 Pipeline 结构


💡 作业一:整理当前代码的逻辑先后顺序

您提供的代码展示了从原始数据到最终模型评估的完整流程。使用Pipeline结构后,整个流程被清晰地拆分和封装。

1. 整体流程步骤 (宏观视角)

序号步骤名称对应操作负责人状态
1数据加载pd.read_csv()外部原始数据
2数据划分train_test_split()外部原始X train , X test , y train , y test X_{\text{train}}, X_{\text{test}}, y_{\text{train}}, y_{\text{test}}Xtrain,Xtest,ytrain,ytest
3Pipeline 定义ColumnTransformer+Pipeline外部定义模型结构
4模型训练pipeline.fit(X_train, y_train)Pipeline 内部X train X_{\text{train}}Xtrain预处理→ \to分类器训练
5模型预测pipeline.predict(X_test)Pipeline 内部X test X_{\text{test}}Xtest预处理→ \to分类器预测
6模型评估classification_report()外部结果分析

2. Pipeline 内部执行逻辑 (微观视角)

当执行pipeline.fit(X_train, y_train)pipeline.predict(X_test)时,Pipeline会按以下顺序和规则执行内部的ColumnTransformerRandomForestClassifier

A. 预处理器preprocessor(ColumnTransformer)的执行顺序

ColumnTransformer是预处理的核心,它将不同的转换器(Transformer)并行应用于不同的列子集。

特征类型转换器串联 (Pipeline 内部)目的
有序分类SimpleImputer(众数填充)→ \toOrdinalEncoder(有序编码)处理Home Ownership,Years in current job,Term
标称分类SimpleImputer(众数填充)→ \toOneHotEncoder(独热编码)处理Purpose
连续数值SimpleImputer(众数填充)→ \toStandardScaler(标准化)处理剩余的数值特征

ColumnTransformer 行为规则:

  • 并行处理:三种特征类型的转换器是同时运行的。
  • 整合输出:所有转换器的输出结果(经过填充、编码、缩放)被水平拼接成一个单一的、干净的 NumPy 数组,然后传递给下一步的估计器。
B. Pipeline 训练与预测规则
阶段转换器 (preprocessor)估计器 (classifier)核心意义 (防止数据泄露)
训练fit_transform(X_train):计算并存储规则(均值、标准差、编码字典),并转换数据。fit(X_processed, y_train):学习模型的参数(如随机森林的树结构)。转换规则只在训练集上学习。
预测transform(X_test)直接应用训练阶段学到的规则来转换数据。predict(X_processed):直接使用训练好的模型参数进行预测。避免在测试集上学习任何统计量。

💡 作业二:制作适合所有机器学习的通用 Pipeline

通用 Pipeline 的设计思想是:定义所有可能的处理步骤,然后通过参数灵活地开启或关闭它们。

以下是一个通用的机器学习 Pipeline 模板,它涵盖了数据预处理、特征选择和模型训练等环节。

通用机器学习 Pipeline 结构模板

fromsklearn.pipelineimportPipelinefromsklearn.composeimportColumnTransformer# ... 其他必要的导入# 1. 定义不同类型的特征列 (这是最依赖具体数据集的一步)NUMERIC_FEATURES=[...]# 连续数值特征ORDINAL_FEATURES=[...]# 有序分类特征NOMINAL_FEATURES=[...]# 标称分类特征(需要独热编码)# ----------------- 步骤 1: 预处理 Transformers -----------------# 1.1 数值特征 Pipeline (通用且常见)numeric_transformer=Pipeline(steps=[('imputer',SimpleImputer(strategy='median')),# 缺失值处理(中位数/均值)('scaler',StandardScaler())# 数据缩放(标准化/归一化)])# 1.2 有序特征 Pipelineordinal_transformer=Pipeline(steps=[('imputer',SimpleImputer(strategy='most_frequent')),# 缺失值处理(众数)('encoder',OrdinalEncoder())# 有序编码])# 1.3 标称特征 Pipelinenominal_transformer=Pipeline(steps=[('imputer',SimpleImputer(strategy='most_frequent')),# 缺失值处理(众数)('onehot',OneHotEncoder(handle_unknown='ignore'))# 独热编码])# ----------------- 步骤 2: ColumnTransformer 整合 -----------------preprocessor=ColumnTransformer(transformers=[('num',numeric_transformer,NUMERIC_FEATURES),('ord',ordinal_transformer,ORDINAL_FEATURES),('nom',nominal_transformer,NOMINAL_FEATURES)],remainder='drop'# 丢弃未指定的列(除非您确定要保留))# ----------------- 步骤 3: 完整 Pipeline -----------------# 引入一个特征选择步骤,使 Pipeline 更通用fromsklearn.feature_selectionimportSelectKBestfromsklearn.linear_modelimportLogisticRegression# 例子:一个分类估计器universal_pipeline=Pipeline(steps=[('preprocessor',preprocessor),# A. 预处理 (ColumnTransformer)('feature_selection',SelectKBest(k='all')),# B. 特征选择 (可选)('estimator',LogisticRegression(random_state=42))# C. 估计器/模型 (分类器/回归器)])

通用 Pipeline 的优势和调优

这种通用结构的最大优势在于,它将操作流程具体参数分离,完美适配GridSearchCVRandomizedSearchCV进行超参数调优。

  1. 灵活调参:
    您可以轻松调优预处理步骤的参数,例如:

    • Imputer 策略'preprocessor__num__imputer__strategy': ['median', 'mean']
    • Scaler 类型:完全移除StandardScaler步骤,或替换为MinMaxScaler
    • 特征选择'feature_selection__k': [50, 100, 'all']
  2. 兼容性强:

    • 如果数据集中没有缺失值,您可以在调参时将SimpleImputer的步骤参数设置为空列表[]来跳过该步骤。
    • 如果不需要特征选择,可以直接将SelectKBest的参数'k'设置为'all',或者在调参中将其移除。

这种封装和流程化的思想(DRY 原则)是现代数据科学项目的基础。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 20:03:00

GraphQL字段别名的秘密武器:PHP环境下高效数据查询的终极方案

第一章:GraphQL字段别名的核心概念与PHP集成背景GraphQL 字段别名允许客户端在查询时为返回的字段指定自定义名称,从而避免响应字段冲突,并提升数据结构的可读性与灵活性。在复杂的查询场景中,同一字段可能需要多次调用但携带不同…

作者头像 李华
网站建设 2026/6/2 14:33:56

最近在折腾六层电梯控制系统,用MCGS7.7触摸屏和三菱FX3U PLC搞联机调试。这俩设备通过COM4口通讯,中间踩了不少坑,把关键配置和程序逻辑拎出来说说

6六层电梯MCGS7.7和三菱FX3U系列PLC联机运行程序3,带io表新,开门延时6秒,COM4口通讯 通讯口设置这块儿,三菱FX3U的编程口自带RS422转成了COM4的RS232。在GX Works2里直接配置通讯参数的时候,记得把D8120寄存器设成H00…

作者头像 李华
网站建设 2026/6/4 22:53:03

实物资产代币化(RWA)出海指南:跨越从香港到全球的合规三重门

监管分割线:“境内禁止、境外放行”下的出海跳板 在实物资产代币化(RWA)的全球热潮中,一条“境内禁止、境外放行”的监管分割线清晰浮现。这一格局使得香港成为国内从业者出海的核心跳板。然而,从香港走向更广阔的海外…

作者头像 李华
网站建设 2026/6/3 16:23:31

产品经理如何拥抱AI大模型:从入门到实战的全面指南

本文针对产品经理,探讨了在AI大模型时代如何保持竞争力。文章首先强调了产品经理需具备的核心能力,包括理解用户需求、把握市场趋势等;其次详细阐述了AI大模型为产品经理带来的五大价值,如提升用户洞察、实现个性化推荐等&#xf…

作者头像 李华
网站建设 2026/6/2 19:18:39

PHP 8.6扩展性能优化秘籍:提升执行效率300%的底层策略

第一章:PHP 8.6 扩展开发概述PHP 8.6 作为 PHP 语言持续演进的重要版本,进一步优化了内核性能并增强了扩展开发的灵活性与稳定性。扩展开发允许开发者使用 C 语言直接与 Zend 引擎交互,实现高性能功能模块,适用于底层系统集成、算…

作者头像 李华
网站建设 2026/6/5 13:35:32

SoapUI接口测试脚本开发:从基础到进阶实践

接口测试在现代化软件测试体系中的关键地位 随着微服务架构和分布式系统的普及,接口测试已成为保证软件质量的核心环节。根据业界统计数据,现代软件系统中超过70%的功能交互通过接口实现,这使得接口测试的覆盖率直接影响产品的稳定性和可靠性…

作者头像 李华