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

【Python机器学习系列】一文带你了解机器学习中的Pipeline管道机制(理论+源码)

这是Python机器学习原创文章,我的第183篇原创文章。

一、引言

       对于表格数据,一套完整的机器学习建模流程如下:

图片

背景知识1:机器学习中的学习器

【Python机器学习系列】一文搞懂机器学习中的转换器和估计器(附案例)

背景知识2:机器学习中的管道机制

简介:

        转换器用于数据的预处理和特征工程,它们无状态且只学习转换规则。而估计器用于模型的训练和预测,它们有状态且学习训练数据中的模式和规律。转换器和估计器在机器学习中扮演不同的角色,但它们通常可以结合在一起构建一个完整的机器学习流程。

        机器学习的管道(Pipeline)机制通过将多个转换器和估计器按顺序连接在一起,可以构建一个完整的数据处理和模型训练流程。在管道机制中,可以使用Pipeline类来组织和连接不同的转换器和估计器。Pipeline类提供了一种简单的方式来定义和管理机器学习任务的流程。

好处:

        1.管道机制是按照封装顺序依次执行的一种机制,在机器学习算法中得以应用的根源在于,参数集在新数据集(比如测试集)上的重复使用。

        2.可以结合grid search对参数进行选择。

二、实现过程

导入第三方库

import pandas as pd
from sklearn.pipeline import Pipeline #管道机制
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import train_test_split #分训练和测试集
#导入“流水线”各个模块(标准化,降维,分类)
from  sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV

准备数据

data = pd.read_csv(r'Dataset.csv')
df = pd.DataFrame(data)
target = 'target'
features = df.columns.drop(target)
X_train, X_test, y_train, y_test = train_test_split(df[features], df[target], test_size=0.2, random_state=0)

2.1 建立管道进行分类预测

        steps为Pipeline类最关键的参数,sklearn规定它是一个[( ),( )]类型,列表里面是一个个元组,分别为名字和工序,从左到右是流水线上的先后顺序。Pipleline中最后一个之外的所有estimators都必须是变换器(transformers),最后一个estimator可以是任意类型(transformer,classifier,regresser),如果最后一个estimator是个分类器,则整个pipeline就可以作为分类器使用,如果最后一个estimator是个聚类器,则整个pipeline就可以作为聚类器使用。如果你不想为每一个步骤提供用户指定的名称,这种情况下,就可以用make_pipeline函数创建管道,它可以为我们创建管道并根据每个步骤所属的类为其自动命名。

# pipe=Pipeline(steps=[('standardScaler',StandardScaler()), ('pca', PCA()), ('svc',SVC())])
pipe=make_pipeline(StandardScaler(),PCA(),SVC())
pipe.predict(X_test) #预测结果
print('Test accuracy: %.3f' % pipe.score(X_test, y_test))#输出精度

输出:

图片

2.2 管道流水线+网格搜索参数

        在机器学习中,超参数是模型的配置参数,需要在训练之前设置,并且不能通过模型的学习过程来自动调整。超参数的选择对于模型的性能和泛化能力非常重要,因此需要通过实验来确定最佳的超参数组合。GridSearchCV是scikit-learn库中的一个类,用于进行网格搜索(Grid Search)和交叉验证(Cross-Validation)来选择模型的最佳超参数。使用GridSearchCV时,需要提供一个估计器(Estimator)对象、超参数的候选值列表和评估指标(如准确率、均方误差等)。GridSearchCV将对所有超参数组合进行交叉验证,并返回具有最佳性能的超参数组合及其对应的模型。

pipeline=Pipeline([('scaler',StandardScaler()),('pca',PCA()),('svm',SVC())])
param_grid={'svm__C':[0.001,0.01,0.1,1,10,100],'svm__gamma':[0.001,0.01,0.1,1,10,100]}# 定义网格搜索参数,用<estimator>__<parameter>形式设置参数
grid=GridSearchCV(pipeline,param_grid,cv=5, scoring='accuracy')# 网格搜索模型实例化
grid.fit(X_train,y_train)
grid.predict(X_test)
print('Test accuracy: %.3f' % grid.score(X_test, y_test))#输出精度

输出:

图片

        本文简单介绍了机器学习管道流水线机制的使用方法,事实上特征处理过程也可以加入管道,我们还可以自定义转化器加入管道中,可以对不同的特征处理划分不同的管道,这些用法我后期出文章再细说。

本期内容就到这里,我们下期再见!需要数据集和源码的小伙伴关注底部公众号添加作者微信!

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。

http://www.lryc.cn/news/268477.html

相关文章:

  • 算法基础之整数划分
  • 关于“Python”的核心知识点整理大全47
  • Android 8.1 设置USB传输文件模式(MTP)
  • 模型量化 | Pytorch的模型量化基础
  • adb和logcat常用命令
  • 千巡翼X4轻型无人机 赋能智慧矿山
  • 【Android 13】使用Android Studio调试系统应用之Settings移植(一):编译服务器的配置、AOSP源码的下载、编译、运行
  • 【1】Docker详解与部署微服务实战
  • C# JsonString转Object以及Object转JsonString
  • 华为OD机试真题-中文分词模拟器-2023年OD统一考试(C卷)
  • 【并发设计模式】聊聊 基于Copy-on-Write模式下的CopyOnWriteArrayList
  • OpenCV中使用Mask R-CNN实现图像分割的原理与技术实现方案
  • 论文阅读《Rethinking Efficient Lane Detection via Curve Modeling》
  • Leetcode—2660.保龄球游戏的获胜者【简单】
  • ubuntu服务器上安装KVM虚拟化
  • SpreadJS 集成使用案例
  • 单挑力扣(LeetCode)SQL题:534. 游戏玩法分析 III(难度:中等)
  • 【OpenCV】告别人工目检:深度学习技术引领工业品缺陷检测新时代
  • VR全景图片制作时有哪些技巧,VR全景图片能带来哪些好处
  • 【VUE】Flask+vue-element-admin前后端分离项目发布到linux服务器操作指南
  • django的gunicorn的异步任务执行
  • KEPServerEX 6 之【外篇-2】PTC-ThingWorx服务端软件安装 PostgreSQL本地安装
  • websocket 介绍
  • 【IoT网络层】STM32 + ESP8266 +MQTT + 阿里云物联网平台 |开源,附资料|
  • 数据分析工具 Top 8
  • AI 换脸的新时代:没有显卡也可以使用的AI换脸工具
  • 3.Python中的循环结构
  • 机器学习之BP神经网络精讲(Backpropagation Neural Network(附案例代码))
  • 安全生产人员定位系统助企业实现智能化管理,提高生产安全性和效率
  • 动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本