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

day 23

机器学习管道 pipeline

一般通用pipeline的实现流程:

1.构建多个转换器(transformer),来实现对特征的预处理

2.构建 ColumnTransformer,将不同的预处理应用于不同的列子集,构造一个完备的转化器

3.构建完整的 Pipeline,将预处理器和模型串联起来

通用pipeline

如果要实现一个简单的适用于所有机器学习模型的pipeline,我觉得可以通过类的封装来实现:

具体代码实例如下:

from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder, OrdinalEncoder
from sklearn.impute import SimpleImputer
import pandas as pd
from sklearn.model_selection import train_test_splitclass GenericPipelineBuilder:#构造函数传入需要的参数,包括模型,数值特征,适合进行独热编码的特征,适合进行序数编码的特征,指定每个序数编码特征的类别顺序列表def __init__(self, model, numeric_features, onehot_features, ordinal_features, ordinal_categories=None):self.model = modelself.numeric_features = numeric_featuresself.onehot_features = onehot_featuresself.ordinal_features = ordinal_featuresself.ordinal_categories = ordinal_categories if ordinal_categories else [[] for _ in range(len(ordinal_features))]# 构建数值特征的处理管道,包括缺失值填充和标准化def build_numeric_transformer(self):return Pipeline(steps=[('imputer', SimpleImputer(strategy='mean')),('scaler', StandardScaler())])# 构建适合进行独热编码的特征的处理管道,包括缺失值填充和独热编码def build_onehot_transformer(self):return Pipeline(steps=[('imputer', SimpleImputer(strategy='most_frequent')),('onehot', OneHotEncoder(handle_unknown='ignore', sparse_output=False))])# 构建适合进行序数编码的特征的处理管道,包括缺失值填充和序数编码def build_ordinal_transformer(self):return Pipeline(steps=[('imputer', SimpleImputer(strategy='most_frequent')),('ordinal', OrdinalEncoder(categories=self.ordinal_categories, handle_unknown='use_encoded_value',unknown_value=-1))])# 构建整个预处理的ColumnTransformer,将不同的特征处理管道应用到不同的特征def build_preprocessor(self):return ColumnTransformer(transformers=[('num', self.build_numeric_transformer(), self.numeric_features),('onehot', self.build_onehot_transformer(), self.onehot_features),('ordinal', self.build_ordinal_transformer(), self.ordinal_features)],remainder='passthrough')# 构建完整的机器学习流水线,包括预处理和模型def build_pipeline(self):return Pipeline(steps=[('preprocessor', self.build_preprocessor()),('classifier', self.model)])

使用的话直接实例化类进行操作即可

例子如下:

    data = pd.read_csv('your_data.csv')y = data['target_column']X = data.drop('target_column', axis=1)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)numeric_features = X.select_dtypes(include=['number']).columns.tolist()onehot_features = ['Color', 'City']ordinal_features = ['Education_Level']ordinal_categories = [['High School', 'Bachelor', 'Master', 'PhD']]from sklearn.ensemble import RandomForestClassifiermodel = RandomForestClassifier(random_state=42)builder = GenericPipelineBuilder(model, numeric_features, onehot_features, ordinal_features, ordinal_categories)pipeline = builder.build_pipeline()pipeline.fit(X_train, y_train)print("模型训练完成")

@浙大疏锦行

http://www.xdnf.cn/news/5618.html

相关文章:

  • VIC-2D 7.0 为平面样件机械试验提供全视野位移及应变数据软件
  • MySQL是如何加行级锁的
  • Java大师成长计划之第19天:性能调优与GC原理
  • C# 中 static的使用
  • 计算机网络核心技术解析:从基础架构到应用实践
  • 2025年阿里云大数据ACP高级工程师认证模拟试题(附答案解析)
  • 基于Vue3.0的高德地图api教程004:自定义绘制点的颜色/修改绘制点/删除绘制点
  • RCE联系
  • 什么是ERP?ERP有哪些功能?小微企业ERP系统源码,SpringBoot+Vue+ElementUI+UniAPP
  • 基于LVS和Keepalived实现高可用负载均衡架构
  • [Java实战]Spring Boot 整合 Redis(十八)
  • Browserless 快速上手
  • FFmpeg 与 C++ 构建音视频处理全链路实战(一)—— 环境配置与视频解封装
  • ctfshow——web入门351~356
  • 【Pandas】pandas DataFrame cummax
  • web 自动化之 selenium 下拉鼠标键盘文件上传
  • FreeRTOS学习记录(变量命名规则全解、文件介绍)
  • 制造业IT管理方法论:柔性变更与数据治理的融合实践
  • 视觉-语言-动作模型:概念、进展、应用与挑战(上)
  • OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——nettle库
  • ActiveMQ 高级特性:延迟消息与优先级队列实战(一)
  • 【PmHub后端篇】Skywalking:性能监控与分布式追踪的利器
  • 15.three官方示例+编辑器+AI快速学习webgl_buffergeometry_instancing
  • PINN应用案例:神经网络求解热扩散方程高质量近似解
  • Python的安装使用
  • 深度策略梯度算法PPO
  • 《Asp.net Mvc 网站开发》复习试题
  • Java SpringMVC 异常处理:保障应用健壮性的关键策略
  • Spring Bean有哪几种配置方式?
  • 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 09.天空和背景