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

什么是pipeline?

一、概念

        pipeline,中文名称又称为管线、传输途径,直译起来有点蹩脚,我们可以理解成它就是一个把各个工具串起来的一个流水线。这里,我们常见的主要有两类pipeline,一类是sklearn中的pipeline,一类是Transformers库中的pipeline

二、sklearn中的pipeline

        sklearn中的pipeline用于将数据预处理、特征选择、降维和模型训练等步骤串联起来,形成一个有序的工作流程,它允许我们将多个数据处理步骤和最终的模型(如分类器、回归器等)组合成一个整体,以便后续复用;同时,pipeline也使得训练和预测使用了相同的数据转换步骤,从而减少因人为操作导致的不一致;最后,模块化的操作也使得我们的代码看起来更整洁,且更容易维护。

1、make_pipeline快速创建管道

        这个函数非常适合于快速构建管道,尤其是需要将多个预处理步骤与一个模型结合起来时,这个过程中无需我们指定步骤名称(make_pipeline创建的对象步骤名默认为构造方法的小写形式),只需要import进来我们所需要的流程然后按顺序放到pipeline中。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.pipeline import make_pipeline
from sklearn.metrics import precision_score# 加载数据集
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42)# 创建管道
# 例如这里我们将转换数据和初始化模型用一行代码实现了,简洁清晰
pipeline = make_pipeline(StandardScaler(), SVC())# 训练模型
pipeline.fit(X_train, y_train)# 预测
y_pred = pipeline.predict(X_test)
print('Prec:', precision_score(y_test, y_pred, average='macro'))

2、pipeline自定义创建管道

        sklearn的Pipeline类提供了更多的灵活性,允许自定义管道中的步骤,并为每个步骤命名(也是必须项),该类的灵活性更高,允许我们在管道中添加更多的自定义步骤,例如自定义的转换函数或模型。

(1)自定义类

        首先,加入自定义函数需要确保我们的函数符合sklearn的估计器接口规范,即函数应该能够接受fit和transform方法的调用。这里给出一个简单的示例:

from sklearn.base import BaseEstimator, TransformerMixin# 关键是继承这两个类
class CustomTransformer(BaseEstimator, TransformerMixin):def __init__(self, param=1):self.param = paramdef fit(self, X, y=None):# 在这里实现我们的拟合逻辑return selfdef transform(self, X):# 在这里实现我们的转换逻辑# 例如,返回X的一个新列return X * self.param

(2)调用自定义类

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
from sklearn.metrics import precision_score# 加载数据集
iris = load_iris()# 创建管道
pipeline = Pipeline([('scaler', StandardScaler()),('custom', CustomTransformer(param=2)),  # 加入自定义函数('svm', SVC())
])# 训练模型
pipeline.fit(X_train, y_train)# 预测
y_pred = pipeline.predict(X_test)
print('Prec:', precision_score(y_test, y_pred, average='macro'))

三、Transformers库中的pipeline

        Transformers库中的pipeline是一个高级API,它提供了一种简便的方式来调用预训练模型进行各种NLP、CV以及语音任务,比如情感分析、文本生成、翻译、问答、图像分类等,它的强大之处在于可以在几行代码内快速地实现复杂的任务(原理同样是串联了多个模块),非常适用于模型的快速应用。例如,我们实现一个情感分析的pipeline:

from transformers import pipeline# 加载情感分析的pipeline
sentiment_analysis = pipeline("sentiment-analysis")# 进行情感分析
results = sentiment_analysis(["I love this!", "I hate this!"])# 输出结果
for result in results:print(f"Label: {result['label']}, Score: {result['score']:.4f}")

        pipeline目前支持多达29种人工智能任务,只需要将参数更换成指定的任务名称即可(官网支持名称戳此处)。此外,pipeline类也支持自定义,我们可以指定模型(例如替换成我们自己训练的模型,从而让模型输出的预测结果符合我们的任务需求),分词器/特征抽取器等各个流程中的工具,从而实现高度的定制化,具体可参考官网的教程。但需要注意的是,与sklearn不同,Transformers库的pipeline类是应用型的封装,无法用于训练模型。

 


http://www.mrgr.cn/news/65413.html

相关文章:

  • Docker篇(容器的备份与迁移)
  • 嵌入式开发之文件I/O
  • 分析自动下载电路是如何工作的以及CH340的选型
  • golang gin ShouldBind的介绍和使用
  • C/C++ 随机数生成方法
  • 性能测试方法-基本流程
  • favicon是什么文件?如何制作网站ico图标?
  • 《安全软件开发框架(SSDF) 1.1:降低软件漏洞风险的建议》解读(四)
  • Fish Agent:多语言 Voice-to-Voice 开源语音模型;Runway 推出摄像机运镜功能丨 RTE 开发者日报
  • NVR管理平台EasyNVR多个NVR同时管理:高效管理分散视频资源的全能解决方案
  • 2024年下半软考准考证打印通知及打印说明!
  • 星河计划——北京同仁堂科技发展集团第三终端学术交流研讨会成功举办
  • 一个git相关的cve:CVE-2024-32002
  • 使用 asyncio.run_coroutine_threadsafe 在 Python 中处理异步操作
  • 如何更改Android studio的项目存储路径
  • 北斗有源终端|智能5G单北斗终端|单兵|单北斗|手持机
  • 智算中心建设热潮涌动 AI服务器赋能加速
  • pytorch初学者理解网络的神器summary
  • 【深度学习滑坡制图|论文解读2】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法
  • 大数据与智能算法助力金融市场分析:正大的技术创新探索
  • 【C++】哈希表模拟:开散列技术与哈希冲突处理
  • codeforces round984 div3
  • 《等保测评:中小企业网络安全的加速器》
  • 2024年充电宝哪个牌子性价比高?充电宝十大品牌排行榜!
  • 数据结构-插入排序笔记
  • EDA二维码生成工具 V1.2