【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=Xfor 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 = Xfor 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.mzph.cn/diannao/40798.shtml

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

相关文章

@Validated 根据字段的值不同,动态分组校验

GroupSequenceProvider 配置 作用域只在单个对象的字段里 Data GroupSequenceProvider(value TestProvider.class) public class TestRO {NotNull(message "不能为空",groups ValidatedRemark.A.class)Pattern(regexp "2|3|",message "只能为2,…

vue2使用use注册自定义指令实现权限控制

版本环境 vue的版本是^2.6.12,将会使用到Vue.use()、Vue.directive() 适用环境 页面某些按钮,需要受到当前登录用户的“角色”“权限”的影响,通过store获取角色role和权限permission,通过自定义指令的方式,控制某一…

antd DatePicker日期选择框限制最多选择一年

实现效果 实现逻辑 import React, { useState } from react;const ParentComponent () > {const [dates, setDates] useState(null);const disabledDate (current) > {if (!dates) {return false;}const tooLate dates[0] && current.diff(dates[0], days) &…

Appium自动化测试框架1

电脑的浏览器 手机的浏览器 手机上的app 原生的应用 纯java 手机上的app apk 移动网页应用 纯HTML CSS 手机的浏览器上 电脑的浏览器上 混合应用 java html css python代码 Appium python库 Appium 手机 都是代表本机 0.0.0.0 127.0.0.1 localhost 如何启动app 启动参…

土壤养分化验仪:农业生态与可持续发展

随着现代农业技术的不断进步,土壤养分化验仪在农业生产中扮演着越来越重要的角色。这款高科技设备以其高精度、高效率的特点,为农业生态与可持续发展提供了强有力的支撑。 一、农田土壤监测与管理 农田是土壤养分化验仪最主要的应用场所。通过对农田土壤…

【AI】DeepStream(14):图像分割deepstream-segmentation-test示例演示

【AI】AI学习目录汇总 1、简介 deepstream-segmentation-test示例演示了图像的语义分割。两个配置文件,分别加载U-Net和Res-UNet两种分割模型 unet_output_graph.uffunetres18_v4_pruned0.65_800_data.uffU-Net是一个在生物医学图像分割领域广泛应用的卷积神经网络(CNN),…

集团型企业组织架构复杂,业务线多,如何进行高效费用管控?

企业管理中流行这样一句话:“企业转型,财务先行”。对集团型企业而言,当今的发展形势下,通过财务战略全面转型、最终撬动企业价值提升,是一件难而正确的事情。 集团企业具有经营规模大、产业链多、分支机构多、地域跨度…

地下电子标识器探测仪ED8000选型注意事项

ED8000探测仪是一台集成了多频率、多种ID标识器调制模式、高低灵敏度调节、可读写标识器等全功能、高性能电子标识器探测仪。它有着极高的灵敏度,同时具备良好的噪声抑制能力,不仅适合专业测绘人员,普通操作人员也可以轻松掌握。 ED8000可支持模拟电子标…

洛谷 P1042 [NOIP2003 普及组] 乒乓球

洛谷 P1042 [NOIP2003 普及组] 乒乓球 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中 11 11 11 分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位…

2024亚洲国际餐饮展览会(北京餐饮展|火锅展|预制菜展会)

2024北京餐饮展会,2024北京食材展会,2024北京火锅展会,2024北京火锅食材展会,2024北京预制菜展会,2024北京预制食材展会, 2024亚洲国际餐饮展览会(北京餐饮展|火锅展|预制菜展会) …

【C语言】刷题笔记 Day2

【笔记】 【1】局部变量不初始化,默认放的随机值。 1 int n0; 2 scanf("%d",&n); //13.141 【2】这里虽然输入的是一个浮点数,但是只取整数部分。 【3】3.156e7 表示的是3.156*10的7次方。 【4】多组输入,保存和不保存…

基于 Windows Server 2019 部署域控服务器

文章目录 前言1. 域控服务器设计规划2. 安装部署域控服务器2.1. 添加 Active Directory 域服务2.2. 将服务器提升为域控制器2.3. 检查域控服务器配置信息 3. 管理域账号3.1. 新建域管理员账号3.2. 新建普通域账号 4. 服务器加域和退域4.1. 服务器加域操作4.2. 服务器退域操作 总…

Iperf基本用法

Iperf是一款开源的网络性能测试工具,它可以用来测量网络带宽、延迟、抖动和数据包丢失等网络性能指标。Iperf支持TCP和UDP协议,可以用于点对点或客户端-服务器等模式的网络测试。 安装Iperf 在Linux系统中,您可以使用包管理器安装Iperf。例如…

记录一下简单导入导出excel二级表头

数据库导入导出表头 之前的工具类GenerateExcelToFile新增两个导出这种二级表头方法 package com.njry.utils;import cn.hutool.core.util.IdUtil; import com.njry.config.FileProperties; import com.njry.exception.BadRequestException; import org.apache.poi.hssf.user…

OpenGL的学习之路

Qt如何创建OpenGL的渲染窗口? 类比GLFW库,Qt提供了OpenGL的渲染窗口类QOpenGLWidget: 1、重写initializeGL()和resizeGL()函数来设置OpenGL状态并提供透视图转换。 2、重写paintGL()来绘制3D场景,只调用OpenGL函数。 3、还可以…

python 基础综合应用——小开发

#python 基础综合应用——小开发 综合复习 变量- 循环- 函数- 模块 开发 名片管理系统 名片管理系统介绍 名片管理系统可以理解成花名册软件,通过个人新建人的信息后可以进行查询等简单操作的程序 名片管理系统有三个作用, 1.新建名片 2.显示全部名…

【设计模式】装饰者模式里Java实现

插: AI时代,程序员或多或少要了解些人工智能,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家(前言 – 人工智能教程 ) 坚持不懈,越努力越幸运,大家…

【VIM的使用】

Vim 是一个非常强大的文本编辑器,尤其在 Linux 环境下被广泛使用。它基于 vi 编辑器开发而来,增加了许多功能和改进。下面是一个简化的 Vim 教程,帮助你快速上手: 启动 Vim 要启动 Vim,只需在终端中输入 vim [filen…

Leetcode刷题2---两数相加 Python

目录 题目及分析解法一: 迭代法解法二: 递归法解法三:反转链表法 题目及分析 (力扣序号2:两数相加) 给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储…

python之音频处理(2)两个音频文件的合并

from pydub import AudioSegment# 加载两个音频文件 audio1 AudioSegment.from_file(r"D:\websiteDownload\huanxing.wav") audio2 AudioSegment.from_file(r"D:\websiteDownload\我今天被一件事情搞得很烦.wav")# 设置间隔(单位:…