【Python机器学习】算法链与管道——通用的管道接口

news2025/1/17 23:17:06

Pipeline类补单可以用于预处理和分类,实际上还可以将任意数量的估计器连接在一起。例如,我们可以构建一个包含特征提取、特征选择、缩放和分类的管道,总共有4个步骤。同样的,最后一步可以用聚类或回归代替。

对于管道中估计器的唯一压球就是,除了最后一步之外的所有步骤都需要具有transform方法,这样它们可以生成新的数据表示,以供下一个步骤使用。

在调用Pipeline.fit的过程中,管道内部依次对每个步骤调用fit和transform,其输入的前一个步骤中transform方法的输出。对于管道的最后一步,则仅调用fit。

实现方法如下。要记住,pipeline.steps是由元祖组成的列表,所以pipeline.steps[0][1]是第一个估计器,pipeline.steps[1][1]是第二个估计器,以此类推:

def fit(self,X,y):
    X_transformed=X
    for name,estimators in self.steps[:-1]:
    #遍历除最后一步之外的所有步骤
    #对数据进行拟合和变换
        X_transformed=estimators.fit_transform(X_transformed,y)
    self.steps[-1][1].fit(X_transformed,y)
    return self

使用Pipeline进行预测时,我们同样利用除最后一步之外的所有步骤对数据进行变换(transform),然后对最后一步调用predict:

def predict(self,X):
    X_transformed = X
    for step in self.steps[:-1]:
        # 遍历除最后一步之外的所有步骤
        # 对数据进行变换
        X_transformed=step[1].transform(X_transformed)
    return self.steps[-1][1].predict(X_transformed)

整个过程包含两个变换器(transformer),还有一个分类器。

管道的最后一步不需要具有predict函数,比如说,我们可以创建一个只包含一个缩放器和一个PCA的管道。由于最后一步(PCA)具有transform方法,所以我们可以对管道调用transform,已得到将PCA.transform应用于前一个步骤处理过的数据后得到的输出。

管道的最后一步只需要具有fit方法。

1、用make_pipeline方便的创建管道

我们通常不需要为每个步骤提供用户指定的名称,有一个很方便的函数make_pipeline,可以为我们创建管道并根据每个步骤所属的类为其自动命名。

make_pipeline的语法如下:

from sklearn.pipeline import make_pipeline

#标准写法
pipe_long=Pipeline([('scaler',MinMaxScaler()),('svm',SVC(C=100))])
#缩写语法
pipe_short=make_pipeline(MinMaxScaler(),SVC(C=100))

管道对象pipe_long和pipe_short的作用完全相同,但pipe_short的步骤是自动命名的。

我们可以通过查看steps属性来查看步骤的名称:

print('步骤名称:{}'.format(pipe_short.steps))

这两个步骤被命名为minmaxscaler和svc,通常来说,步骤名称只是类名称的小写版本。如果是多个步骤属于同一个类,则会附加一个数字:

pipe=make_pipeline(StandardScaler(),PCA(n_components=2),StandardScaler())
print('步骤名称:{}'.format(pipe.steps))

但是这种情况下,使用更有明确名称的Pipeline构建可能更好,以便于为每个步骤提供更有语义的名称。

2、访问步骤属性

通常来说,如果我们想要检查管道中某一步骤的属性(比如线性模型的系数或PCA提供的成分),最简单的方法是通过named_steps属性,它是一个字典,将步骤名称映射为估计器:

cancer=load_breast_cancer()
pipe.fit(cancer.data)
#从pca步骤提取前两个主成分
components=pipe.named_steps['pca'].components_
print('主成分shape:{}'.format(components.shape))

3、访问网格搜索管道中的属性

使用管道的主要原因之一就是进行网格搜索。一个常见的任务就是在网格搜索内访问管道的某些步骤。

我们对cancer数据上的LogisticRegression分类器进行网格搜索,在将数据传入LogisticRegression分类器之前,先用Pipeline和StandardScaler对数据进行缩放。

首先,我们用make_pipeline函数创建一个管道:

cancer=load_breast_cancer()
pipe=make_pipeline(StandardScaler(),LogisticRegression())

接下来,创建一个参数网格。LogisticRegression需要调节的正则化参数是参数C,我们对这个参数使用对数网格,在0.01和100之间进行搜索。由于我们使用了make_pipeline哈数,所以管道中LogisticRegression步骤的名称是小写的logisticregression。因此,为了调节参数C,我们必须指定logisticregression__C的参数网格:

param_grid={'logisticregression__C':[0.01,0.1,1,10,100]}

我们将cancer数据集划分为训练集和测试集,并对网格搜索进行拟合:

X_train,X_test,y_train,y_test=train_test_split(cancer.data,cancer.target,random_state=4)
grid=GridSearchCV(pipe,param_grid=param_grid,cv=5)
grid.fit(X_train,y_train)

GridSearchCV找到的最佳模型保存在best_estimator_中:

print('最佳模型:{}'.format(grid.best_estimator_))

在这个例子中,best_estimator_是一个管道,它包含两个步骤:standardscaler和logisticregression。我们可以使用管道的named_steps属性来访问logisticregression步骤:

print('logisticregression步骤:{}'.format(grid.best_estimator_.named_steps['logisticregression']))

现在我们得到了训练过的LogisticRegression实例。下面可以访问与每个输入特征相关的系数(权重):

print('logisticregression权重:{}'.format(grid.best_estimator_.named_steps['logisticregression'].coef_))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1894994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python学习笔记28:进阶篇(十七)常见标准库使用之质量控制中的代码质量与风格第二部分

前言 本文是根据python官方教程中标准库模块的介绍,自己查询资料并整理,编写代码示例做出的学习笔记。 根据模块知识,一次讲解单个或者多个模块的内容。 教程链接:https://docs.python.org/zh-cn/3/tutorial/index.html 质量控制…

旅游系统(附管理端+前台)PHP源码

一. 前言 今天小编给大家带来了一款可学习,可商用的,旅游系统 源码,支持二开,无加密。支持景点管理,登录,景点预定,意见反馈,统计等功能。详细界面和功能见下面视频演示。 二. 视频…

spdlog一个非常好用的C++日志库(四): 源码分析之logger类

目录 1.简介 2.类图关系 3.logger数据成员 4.logger函数成员 4.1.构造与析构 4.1.1.构造函数 4.1.2.拷贝构造、移动构造 4.2.交换操作 4.3.log()记录日志消息 4.3.1.格式串 4.3.2.普通字符串 4.3.3.日志级别 4.3.4.宽字符支持 4.4.sink_it_:将log消息…

android应用的持续构建CI(二)-- jenkins集成

一、背景 接着上一篇文章,本文我们将使用jenkins把所有的流程串起来。 略去了对android应用的加固流程,重点是jenkins的job该如何配置。 二、配置jenkins job 0、新建job 选择一个自由风格的软件项目 1、参数赋值 你可以增加许多参数,这…

免费的鼠标连点器哪个好用?5款2024年最新鼠标连点器分享

鼠标连点器是电脑网络游戏爱好者并不陌生的游戏辅助工具,他在FPS、RTS、moba等游戏种类中发挥着重要作用。可以帮助玩家的鼠标完成各种简单点击动作。轻松实现游戏刷机升级。让你游戏升级不再“肝”,轻松刷图升级,秒表大佬不是梦!…

中国东方资产管理25届秋招北森测评笔试如何高分通过?真题考点分析看完这篇就够了

一、东方资管校招测评题型分析 中国东方资产管理股份有限公司(中国东方资管)的校园招聘测评题型主要包括以下几个部分: 1. **计分题,行测知识**:这部分题量大约在56-57题左右,分为不同的模块进行计时测试。…

探索设计的未来:了解设计师对生成式人工智能(AIGC)工具的采用

在数字化浪潮的推动下,设计行业正经历着一场革命性的变革。随着生成式人工智能(AIGC)技术的发展,设计师们迎来了前所未有的机遇与挑战。这些工具不仅重塑了传统的设计流程,还为设计师们提供了更广阔的创意空间和更高效…

航模插头篇

一、常见的电池插头(电调端 是公头 电池端 是母头) 电池总是被插的 1.XT60头 过流大 安全系数高 难插拔 2.T插 插拔轻松 过流比较小 容易发烫 电调端 是公头 电池端 是母头 3.香蕉头插孔 过流够 插拔轻松 但 容易插反 爆炸 4.TX90(和XT60差…

如何快速选择短剧系统源码:高效构建您的在线短剧平台

在数字化时代,短剧作为一种新兴的娱乐形式,受到了广泛的欢迎。随着市场需求的增长,构建一个在线短剧平台成为了很多创业者和开发者的目标。而选择正确的短剧系统源码则是实现这一目标的关键步骤。本文将为您提供一些实用的指导,帮…

C++ 文达校内党员管理系统-计算机毕业设计源码20855

目 录 摘要 1 绪论 1.1研究背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2 文达校内党员管理系统系统分析 2.1 可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4 系统流程分析 2.4.1 数据流程 2.5.2 业务流程 2.…

智能井盖采集装置 开启井下安全新篇章

在现代城市的脉络之下,错综复杂的管网系统如同城市的血管,默默支撑着日常生活的有序进行。而管网的监测设备大多都安装在井下,如何给设备供电一直是一个难题,选用市电供电需经过多方审批,选用电池供电需要更换电池包&a…

【深入理解Java虚拟机】判断垃圾-引用计数法及其缺陷

什么是引用计数法 引用计数法用来判断对象是否存活 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器的值加一;当引用失效时,计数器的值就减一,任何时刻计数器为0的对象是不可能在被使用的。(存…

项目进度管理(信息系统项目管理师)

定义活动的输出:活动清单、活动属性、里程碑清单定义活动的输入包括进度管理计划、范围基准、事业环境因素、组织过程资产定义活动的工具与技术包括专家判断、分解、滚动式规划、会议分解是一种把项目范围和项目可交付成果逐步划分为更小、更便于管理的组成部分的技…

基于单片机的出租车计价器实验教学案例设计

摘 要 为了让学生加深单片机的理解,加强学生的单片机技术应用、实践动手、创新能力的培养,根据单片机课程设计教学情况精心设计了基于单片机的出租车计价器实验教学案例。本教学案例的基本原理是速度的检测,里程、价格的计算和显示。学生通…

redis客户端基本操作命令

1 key结构 *1、模糊匹配 keys 值 2、删除 del key DEL key [key …]:删除一个或多个key,如果key本身不存在,则会忽略 3、查询 get “key” key加双引号 Redis的key允许有多个单词形成层级结构,多个单词之间使用:隔开。 例如&…

交互未来入选“北京市通用人工智能产业创新伙伴计划”模型伙伴

在“开启数智新时代,共享数字新未来”的宏大主题下,2024全球数字经济大会于近日盛大开幕,汇聚全球智慧,共谋数字经济新篇章。大会首日,备受瞩目的人工智能专题论坛率先拉开帷幕,以“应用即未来——大模型赋…

Python列表创建使用心得详解

概要 列表是Python中最常用的数据结构之一,它用于存储有序的元素集合。Python提供了多种方式来创建和操作列表,使得列表在数据处理、存储和操作中非常灵活。本文将详细介绍Python列表创建的各种技巧,包括基础创建方法、列表推导式、内置函数和高级创建技巧,并包含具体的示…

重塑绿色共享消费新纪元:共融增值模式

在当今时代浪潮中,绿色消费与共享经济已成为推动社会可持续发展的重要力量。为此,我们精心打造了“共享购”这一前沿消费增值生态体系,它不仅深度联结了商家资源,更通过独特的价值循环机制,促进了商家与消费者的共同繁…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【密钥生成介绍及算法规格】

密钥生成介绍及算法规格 当业务需要使用HUKS生成随机密钥,并由HUKS进行安全保存时,可以调用HUKS的接口生成密钥。 注意: 密钥别名中禁止包含个人数据等敏感信息。 开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harm…