在Kedro项目中创建数据科学流水线指南

在Kedro项目中创建数据科学流水线指南

kedro kedro 项目地址: https://gitcode.com/gh_mirrors/ked/kedro

概述

本文将详细介绍如何在Kedro项目中添加数据科学流水线,这是构建机器学习项目的重要环节。我们将从基础概念开始,逐步讲解如何扩展默认项目流水线,实现数据科学工作流程。

数据科学流水线核心组件

数据科学流水线通常包含以下几个关键部分:

  1. 数据处理节点:负责数据分割、特征工程等预处理工作
  2. 模型训练节点:构建和训练机器学习模型
  3. 模型评估节点:评估模型性能并输出指标

节点函数实现

nodes.py文件中,我们定义了三个核心函数:

def split_data(data: pd.DataFrame, parameters: dict[str, Any]) -> Tuple:
    """将数据分割为特征和目标变量的训练集和测试集"""
    X = data[parameters["features"]]
    y = data["price"]
    X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size=parameters["test_size"], random_state=parameters["random_state"]
    )
    return X_train, X_test, y_train, y_test

def train_model(X_train: pd.DataFrame, y_train: pd.Series) -> LinearRegression:
    """训练线性回归模型"""
    regressor = LinearRegression()
    regressor.fit(X_train, y_train)
    return regressor

def evaluate_model(regressor: LinearRegression, X_test: pd.DataFrame, y_test: pd.Series):
    """评估模型性能并记录R²分数"""
    y_pred = regressor.predict(X_test)
    score = r2_score(y_test, y_pred)
    logger.info("模型在测试数据上的R²系数为 %.3f", score)

参数配置管理

Kedro使用YAML文件管理配置参数,数据科学流水线的参数存储在parameters_data_science.yml中:

model_options:
  test_size: 0.2
  random_state: 3
  features:
    - engines
    - passenger_capacity
    - crew
    - d_check_complete
    - moon_clearance_complete
    - iata_approved
    - company_rating
    - review_scores_rating

这些参数控制着数据分割的比例、随机种子以及用于建模的特征列。

模型持久化配置

catalog.yml中配置模型保存方式:

regressor:
  type: pickle.PickleDataset
  filepath: data/06_models/regressor.pickle
  versioned: true

设置versioned: true启用模型版本控制,每次运行流水线都会保存一个新版本的模型,便于追踪模型迭代历史。

流水线构建

pipeline.py中定义数据科学流水线:

def create_pipeline(**kwargs) -> Pipeline:
    return pipeline([
        node(
            func=split_data,
            inputs=["model_input_table", "params:model_options"],
            outputs=["X_train", "X_test", "y_train", "y_test"],
            name="split_data_node",
        ),
        node(
            func=train_model,
            inputs=["X_train", "y_train"],
            outputs="regressor",
            name="train_model_node",
        ),
        node(
            func=evaluate_model,
            inputs=["regressor", "X_test", "y_test"],
            outputs=None,
            name="evaluate_model_node",
        ),
    ])

流水线运行与切片

完整流水线运行

执行以下命令运行整个项目流水线(包括数据处理和数据科学部分):

kedro run

流水线切片运行

如果只需要运行数据科学流水线部分,可以使用--pipeline参数:

kedro run --pipeline=data_science

这种切片技术特别适用于以下场景:

  • 只调整模型超参数而不修改数据处理逻辑
  • 快速验证模型变更
  • 调试特定流水线部分

高级主题:模块化流水线

随着项目复杂度增加,建议将流水线模块化。模块化流水线具有以下优势:

  1. 逻辑隔离:不同功能模块相互独立
  2. 可重用性:同一模板可多次实例化
  3. 易于维护:各模块可单独测试和更新

模块化实现示例

  1. 更新目录配置:为不同实例配置不同命名空间
active_modelling_pipeline.regressor:
  type: pickle.PickleDataset
  filepath: data/06_models/regressor_active.pickle
  versioned: true

candidate_modelling_pipeline.regressor:
  type: pickle.PickleDataset
  filepath: data/06_models/regressor_candidate.pickle
  versioned: true
  1. 参数配置分离:为不同实例设置不同参数
active_modelling_pipeline:
    model_options:
      test_size: 0.2
      random_state: 3
      features: [engines, passenger_capacity, crew, d_check_complete, ...]

candidate_modelling_pipeline:
    model_options:
      test_size: 0.2
      random_state: 8
      features: [engines, passenger_capacity, crew, review_scores_rating]
  1. 流水线模板实例化:创建两个独立的流水线实例
def create_pipeline(**kwargs) -> Pipeline:
    pipeline_template = pipeline([...])  # 原始节点定义
    
    active_pipeline = pipeline(
        pipe=pipeline_template,
        inputs="model_input_table",
        namespace="active_modelling_pipeline",
    )
    
    candidate_pipeline = pipeline(
        pipe=pipeline_template,
        inputs="model_input_table",
        namespace="candidate_modelling_pipeline",
    )

    return active_pipeline + candidate_pipeline

这种模式特别适合以下场景:

  • A/B测试不同特征组合
  • 并行实验不同算法
  • 生产模型与实验模型共存

总结

本文详细介绍了在Kedro项目中添加数据科学流水线的完整流程,从基础实现到高级模块化技术。通过合理组织流水线结构,可以构建出可维护、可扩展的机器学习项目。模块化设计尤其适合需要长期迭代的复杂项目,能够显著提高开发效率和代码质量。

kedro kedro 项目地址: https://gitcode.com/gh_mirrors/ked/kedro

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

裴麒琰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值