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

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.mfbz.cn/a/772012.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】Datawhale-AI夏令营分子性质AI预测挑战赛

参赛链接:零基础入门 Ai 数据挖掘竞赛-速通 Baseline - 飞桨AI Studio星河社区 一、赛事背景 在当今科技日新月异的时代,人工智能(AI)技术正以前所未有的深度和广度渗透到科研领域,特别是在化学及药物研发中展现出了巨…

警翼警用记录仪视频格式化后恢复方法

警翼是国内较大的一家警用记录仪厂商,此品牌我们恢复过很多,此次遇到的是一个典型的误格式化的情况,我们来看看误格式化后如何恢复。 故障存储: 32G卡/fat32 故障现象: 客户提供的信息是在交接设备后没有及时备份而做出了初始化设备的操…

fluwx插件实现微信支付

Flutter开发使用fluwx插件实现微信支付,代码量不多,复杂的是安卓和iOS的各种配置。 在 pubspec.yaml 文件中添加fluwx依赖 fluwx: ^4.5.5 使用方法 通过fluwx注册微信Api await Fluwx().registerApi(appId: wxea7a1c53d9e5849d, universalLink: htt…

机器人控制系列教程之Delta机器人动力学分析

动力学简介 机器人动力学分析是已知各运动构件的尺寸参数和惯性参数的情况下,求解末端运动状态与主驱动力矩之间的函数关系。 意义:对并联机器人动力学分析的意义体现在: 为伺服电机的选型提供理论依据;获得动力学参数为目标函数的最优问题做性能评价指标;为高精度控制提…

内容为王:揭秘顶尖品牌的内容营销制胜法宝

内容营销是当今互联网市场推广领域的热门话题,因为它可以帮助企业更好地与受众沟通、建立品牌口碑,增加销售量。 根据咱们何策网的资源库里的SocialBeta2024年最新《2024 内容营销 10 大趋势》的报告来看,品牌在未来内容营销中最应该注重的是…

2024亚太杯中文赛数学建模B题【洪水灾害的数据分析与预测】思路详解

2024 年第十四届 APMCM 亚太地区大学生数学建模竞赛 B题 洪水灾害的数据分析与预测 附件 train.csv 中提供了超过 100 万的洪水数据,其中包含洪水事件的 id、季风强度、地形排水、河流管理、森林砍伐、城市化、气候变化、大坝质量、淤积、农业实践、侵蚀、无效防灾、…

Unity 之基于URP使用UniStorm Weather System天气系统

内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity 之基于URP使用UniStorm Weather System天气系统 TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、…

Linux和mysql中的基础知识

cpu读取的指令大部分在内存中(不考虑缓存) 任何程序在运行之前都的加入到内存。 eip->pc指针,指明当前指令在什么位置。 代码大概率是从上往下执行的,基于这样的基本理论。既可以将一部分指令加载到CPU对应的缓存中&#xf…

智能猫砂盆到底哪家好用?自费实测聚宠、糯雪、CEWEY真实反馈!

快到夏天了,是不是还有人因为没挑选到喜欢的智能猫砂盆而苦恼着?太便宜怕不好用,太贵怕质量比不上价格。来来去去拖到现在还没决定,我作为养了四年猫的资深铲屎官,今天就来给大家传授经验,关于我是怎么从好…

从源码到应用:直播电商系统与短视频带货APP开发指南

本篇文章,笔者将从源码到应用,详细探讨如何开发一个直播电商系统和短视频带货APP。 一、系统架构设计 在开始开发之前,首先需要对系统进行整体架构设计。一个完整的直播电商系统和短视频带货APP主要包括以下几个模块: 1.用户管理…

Android12 MultiMedia框架之MediaExtractorService

上节学到setDataSource()时会创建各种Source,source用来读取音视频源文件,读取到之后需要demux出音、视频、字幕数据流,然后再送去解码。那么负责进行demux功能的media extractor模块是在什么时候阶段创建的?这里暂时不考虑APP创建…

UE5.4新功能 - Texture Graph上手简介

TextureGraph是UE5.4还在实验(Experimental)阶段的新功能,该功能旨在材质生成方面达到类似Subtance Designer的效果,从而程序化的生成一些纹理。 本文就来简要学习一下。 1.使用UE5.4或以上版本,激活TextureGraph插件 2.内容视图中右键找到…

day11_homework_need2submit

Homework 编写—个将ts或mp4中视频文件解码到yuv的程序 yuv数据可以使用如下命令播放: ffplay -i output yuv-pix_fmt yuv420p-s 1024x436 要求: ffmpeg解析到avpacket并打印出pts和dts字段完成解码到avframe并打印任意字段完成yuv数据保存 // teminal orders on bash cd ex…

6 矩阵相关案例

矩阵计算在CUDA中的应用是并行计算领域的典型场景 ; 矩阵算法题通常涉及线性代数的基础知识,以及对数据结构和算法的深入理解。解决这类问题时,掌握一些核心思想和技巧会非常有帮助。以下是一些常见的矩阵算法题解题思想: 动态规划…

stm32——定时器级联

在STM32当中扩展定时范围:单个定时器的定时长度可能无法满足某些应用的需求。通过级联,可以实现更长时间的定时;提高定时精度:能够在长定时的基础上,通过合理配置,实现更精细的定时控制;处理复杂…

Postman工具基本使用

一、安装及基本使用 安装及基本使用参见外网文档:全网最全的 postman 工具使用教程_postman使用-CSDN博客 建议版本:11以下,比如10.x.x版本。11版本以后貌似是必须登录使用 二、禁止更新 彻底禁止postman更新 - 简书 host增加&#xff1…

vector与list的简单介绍

1. 标准库中的vector类的介绍: vector是表示大小可以变化的数组的序列容器。 就像数组一样,vector对其元素使用连续的存储位置,这意味着也可以使用指向其元素的常规指针上的偏移量来访问其元素,并且与数组中的元素一样高效。但与数…

【计算机毕业设计】026基于微信小程序的原创音乐

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

记录OSPF配置,建立邻居失败的过程

1.配置完ospf后,在路由表中不出现ospf相关信息 [SW2]ospf [SW2-ospf-1]are [SW2-ospf-1]area 0 [SW2-ospf-1-area-0.0.0.0]net [SW2-ospf-1-area-0.0.0.0]network 0.0.0.0 Jul 4 2024 22:11:58-08:00 SW2 DS/4/DATASYNC_CFGCHANGE:OID 1.3.6.1.4.1.2011.5.25 .1…

《昇思25天学习打卡营第9天|保存与加载》

文章目录 今日所学:一、构建与准备二、保存和加载模型权重三、保存和加载MindIR总结 今日所学: 在上一章节主要学习了如何调整超参数以进行网络模型训练。在这一过程中,我们通常会想要保存一些中间或最终的结果,以便进行后续的模…