Python打卡 DAY 23 pipeline管道

目录

机器学习中的转换器、估计器与管道工程

1. 知识回顾

1.1 转化器和估计器的概念

1.2 管道工程(Pipeline)

1.3 ColumnTransformer和Pipeline类

2. 作业: 通用机器学习Pipeline逻辑顺序

通用Pipeline的典型顺序:

通用Pipeline模板代码:

3. 学习笔记

关键要点:

最佳实践:


机器学习中的转换器、估计器与管道工程

1. 知识回顾

1.1 转化器和估计器的概念

转化器(Transformer):

  • 用于数据预处理和特征工程的类

  • 必须实现fit()transform()方法

  • 示例: StandardScalerOneHotEncoderSimpleImputer

估计器(Estimator):

  • 用于模型训练的类

  • 必须实现fit()predict()方法

  • 示例: 各种分类器(RandomForestClassifier)、回归器(LinearRegression)

1.2 管道工程(Pipeline)

管道(Pipeline)是将多个数据处理步骤和最终估计器串联起来的工具:

  • 按顺序执行一系列转换步骤

  • 最后一个步骤通常是估计器(模型)

  • 优点:

    • 代码更简洁

    • 避免数据泄露

    • 便于交叉验证

    • 可重复使用

1.3 ColumnTransformer和Pipeline类

ColumnTransformer:

  • 用于对数据框的不同列应用不同的转换

  • 可以并行处理数值型和类别型特征

  • 语法示例:

    ColumnTransformer(transformers=[
        ('num', numeric_transformer, numeric_features),
        ('cat', categorical_transformer, categorical_features)
    ])
     

Pipeline类:

  • 将多个处理步骤串联

  • 语法示例:

    Pipeline(steps=[
        ('preprocessor', preprocessor),
        ('classifier', classifier)
    ])
     

2. 作业: 通用机器学习Pipeline逻辑顺序

通用Pipeline的典型顺序:

  1. 数据分割: 首先将数据分为训练集和测试集

  2. 列选择: 识别不同类型的特征(数值型、类别型、文本等)

  3. 预处理:

    • 数值特征:

      • 缺失值处理(填充/删除)

      • 标准化/归一化

      • 特征缩放

      • 多项式特征生成

    • 类别特征:

      • 缺失值处理

      • 编码(OneHot, Ordinal, Target等)

    • 文本特征:

      • 向量化(TF-IDF, Count等)

    • 日期/时间特征:

      • 提取特征(年、月、日、星期等)

  4. 特征选择: 选择最有价值的特征(可选步骤)

  5. 模型训练: 应用机器学习算法

  6. 模型评估: 在测试集上评估性能

通用Pipeline模板代码:

from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split

# 1. 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 2. 定义列类型
numeric_features = ['age', 'income']
categorical_features = ['gender', 'education']

# 3. 创建转换器
numeric_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='median')),
    ('scaler', StandardScaler())])

categorical_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
    ('onehot', OneHotEncoder(handle_unknown='ignore'))])

# 4. 组合转换器
preprocessor = ColumnTransformer(
    transformers=[
        ('num', numeric_transformer, numeric_features),
        ('cat', categorical_transformer, categorical_features)])

# 5. 创建完整管道
clf = Pipeline(steps=[
    ('preprocessor', preprocessor),
    ('classifier', RandomForestClassifier())])

# 6. 训练和评估
clf.fit(X_train, y_train)
score = clf.score(X_test, y_test)

3. 学习笔记

关键要点:

  1. 数据预处理顺序很重要:

    • 先处理缺失值,再进行特征转换

    • 数值特征和类别特征通常需要不同的处理方式

  2. Pipeline优势:

    • 确保测试数据不参与任何预处理步骤的拟合

    • 简化代码结构,提高可读性

    • 便于超参数调优(可以一次调整所有步骤的参数)

  3. ColumnTransformer的作用:

    • 允许对不同类型数据并行应用不同转换

    • 保持数据框结构,便于理解

  4. 通用Pipeline适用性:

    • 可以轻松更换最后的估计器(分类/回归)

    • 可以根据数据类型添加或删除预处理步骤

    • 支持自定义转换器

最佳实践:

  1. 始终先分割数据再进行任何预处理

  2. 对训练数据使用fit_transform,对测试数据只使用transform

  3. 使用Pipeline可以自动处理这一区别

  4. 为每个特征类型创建单独的子Pipeline

  5. 使用有意义的步骤名称便于调试

@浙大疏锦行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值