机器学习基础12-Pipeline实现自动化流程处理(基于印第安糖尿病Pima 数据集)

有一些标准的流程可以实现对机器学习问题的自动化处理,在 scikitlearn 中通过Pipeline来定义和自动化运行这些流程。本节就将介绍如何通过Pipeline实现自动化流程处理。

  • 如何通过Pipeline来最小化数据缺失。
  • 如何构建数据准备和生成模型的Pipeline。
  • 如何构建特征选择和生成模型的Pipeline。

机器学习的自动流程

在机器学习方面有一些可以采用的标准化流程,这些标准化流程是从共同的问题中提炼出来的,例如评估框架中的数据缺失等。在 scikit-learn中提供了自动化运行流程的工具——Pipeline。Pipeline 能够将从数据转换到评估模型的整个机器学习流程进行自动化处理。读者可以到scikit-learn的官方网站阅读关于Pipeline的章节,加深对Pipeline的理解。

数据准备和生成模型的Pipeline

在机器学习的实践中有一个很常见的错误,就是训练数据集与评估数据集之间的数据泄露,这会影响到评估的准确度。要想避免这个问题,需要有一个合适的方式把数据分离成训练数据集和评估数据集,这个过程被包含在数据的准备过程中。数据准备过程是很好的理解数据和算法关系的过程,举例来说,当对训练数据集做标准化和正态化处理来训练算法时,就应该理解并接受这同样要受评估数据集的影响。

Pipeline能够处理训练数据集与评估数据集之间的数据泄露问题,通常会在数据处理过程中对分离出的所有数据子集做同样的数据处理,如正态化处理。

下面将演示如何通过Pipeline来处理这个过程,共分为以下两个步
骤:
(1)正态化数据。
(2)训练一个线性判别分析模型。
在使用Pipeline进行流程化算法模型的评估过程中,采用10折交叉验证来分离数据集。

数据集下载

其代码如下:


import pandas as pd
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import cross_val_score, ShuffleSplit, KFold
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler#数据预处理
path = 'D:\down\\archive\\diabetes.csv'
data = pd.read_csv(path)#将数据转成数组
array = data.values
#分割数据,去掉最后一个标签
X = array[:, 0:8]Y = array[:, 8]
# 分割数据集
n_splits = 10# 随机数种子
seed = 7kfold = KFold(n_splits=n_splits, random_state=seed, shuffle=True)steps = []
steps.append(('Standardize', StandardScaler()))
steps.append(('lda',LinearDiscriminantAnalysis()))model = Pipeline(steps)result = cross_val_score(model, X, Y, cv=kfold)print("算法评估结果:%.3f (%.3f)" % (result.mean(), result.std()))

Pipeline的各个步骤,通过列表参数传递给Pipeline实例,并通过
Pipeline进行流程化处理过程。运行结果:

算法评估结果:0.767 (0.048)

特征选择和生成模型的Pipeline

特征选择也是一个容易受到数据泄露影响的过程。和数据准备一样,特征选择时也必须确保数据的稳固性,Pipeline 也提供了一个工具(FeatureUnion)来保证数据特征选择时数据的稳固性。下面是一个在数据选择过程中保持数据稳固性的例子。

这个过程包括以下四个步骤:
(1)通过主要成分分析进行特征选择。
(2)通过统计选择进行特征选择。
(3)特征集合。
(4)生成一个逻辑回归模型。

在本例中也采用10折交叉验证来分离训练数据集和评估数据集。

代码如下:


import pandas as pd
from sklearn.decomposition import PCA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.feature_selection import SelectKBest
from sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import cross_val_score, ShuffleSplit, KFold
from sklearn.pipeline import Pipeline, FeatureUnion
from sklearn.preprocessing import StandardScaler#数据预处理
path = 'D:\down\\archive\\diabetes.csv'
data = pd.read_csv(path)#将数据转成数组
array = data.values
#分割数据,去掉最后一个标签
X = array[:, 0:8]Y = array[:, 8]
# 分割数据集
n_splits = 10# 随机数种子
seed = 7kfold = KFold(n_splits=n_splits, random_state=seed, shuffle=True)features = []
features.append(('PCA', PCA(n_components=3)))
#添加select_best
features.append(('select_best', SelectKBest(k=6)))steps = []
steps.append(('feature_union', FeatureUnion(features)))steps.append(('logistic', LogisticRegression()))model = Pipeline(steps)result = cross_val_score(model, X, Y, cv=kfold)print("算法评估结果:%.3f (%.3f)" % (result.mean(), result.std()))

运行结果:
此处先创建了FeatureUnion,然后将其作为Pipeline的一个生成步骤。

算法评估结果:0.771 (0.048)

本节学习了通过 scikit-learn 中的 Pipeline 进行自动流程化数据准备和特征选择的过程。接下来将探讨针对要处理的问题,如何提高机器学习算法的准确度。

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

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

相关文章

C#调用barTender打印标签示例

使用的电脑需要先安装BarTender 我封装成一个类 using System; using System.Windows.Forms;namespace FT_Tools {public class SysContext{public static BarTender.Application btapp new BarTender.Application();public static BarTender.Format btFormat;public void Q…

200 套基于Java开发的Java毕业设计实战项目(含源码+说明文档)

文章目录 简介前言第一部分第二部分部分截图源码咨询 简介 博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 前言 对于java方向的毕业设计题目选题&#xf…

2024河南光伏展,河南郑州太阳能光伏展,郑州光伏产业展览会

2024第四届中国(郑州)太阳能光伏及储能产业展览会   时间:2024年2月26-28日 地点:郑州.中原国际博览中心 在过去的几年中,太阳能光伏及储能技术得到了快速的发展和广泛的应用。为了进一步推动这一产业的发展和进步&…

Densenet模型详解

模型介绍 DenseNet的主要思想是密集连接,它在卷积神经网络(CNN)中引入了密集块(Dense Block),在这些块中,每个层都与前面所有层直接连接。这种设计可以让信息更快速地传播,有助于解…

实力征服每寸版图|昂首资本Anzo Capital狂揽“年度最佳经纪商“和“最佳青年导师”双料大奖

棉兰老岛交易者博览会在Tibungco 的 RTC-KorPhil 职业培训中心多功能厅举办。在本次博览会上,Anzo Capital 昂首资本脱颖而出斩获“2023年度最佳经纪商”,Anzo Capital 官方金融教育专家Joseph Lejarde斩获“最佳青年导师”双料大奖。 棉兰老岛交易者…

zabbix语言无法选择中文--zabbix安装配置中文

You are not able to choose some of the languages, because locales for them are not installed on the web server. 1、安装wget yum -y install wget 2、下载中文中文字体并配置 wget https://github.com/echohn/zabbix-zh_CN/archive/master.zip yum -y install unzip un…

Go学习第十天

打印报错堆栈信息 安装errors包 go get github.com/pkg/errors 具体使用 // 新生成一个错误, 带堆栈信息 func New(message string) error//只附加新的信息 func WithMessage(err error, message string) error//只附加调用堆栈信息 func WithStack(err error) error//同时附…

【Vue】vue2预览显示quill富文本内容,vue-quill-editor回显页面,v-html回显富文本内容

文章目录 前言一、下载二、使用步骤1.引入样式2.html代码 总结 前言 提示:这里可以添加本文要记录的大概内容: vue后台框架,若依系统里有一个富文本编辑器,效果如下 在package.json里面查看,发现插件名叫quill 插件的…

美国纽约10日游

一、前言 我有两周断更了,原因是去纽约只顾着玩,没时间写,今天有时间正好和大家分享一下去纽约的攻略 二、以下是一个10天去美国纽约旅游的攻略,十万以内,包括机票、酒店、交通、餐饮和景点门票等费用: 第…

java 泛型作为方法的返回值的封装

问题背景 业务需要,经常需要http方式调用某服务,然后某服务返回特定类型的返回内容。 类似 String resStr xxxHttpClient.post() ,然后它返回一个字符串,你还需要反序列化成某种格式的。 返回值可以反序列化成的形式如下&#…

音视频 ffplay简单过滤器

视频旋转 ffplay -i test.mp4 -vf transpose1视频反转 ffplay test.mp4 -vf hflip ffplay test.mp4 -vf vflip视频旋转和反转 ffplay test.mp4 -vf hflip,transpose1音频变速播放 ffplay -i test.mp4 -af atempo2视频变速播放 ffplay -i test.mp4 -vf setptsPTS/2音视频同…

如何在Windows本地快速搭建SFTP文件服务器,并通过端口映射实现公网远程访问

文章目录 1. 搭建SFTP服务器1.1 下载 freesshd服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#xff0…

1.Python操作txt文本

文章目录 1.Python读取一个txt文件的内容并将其写入到另一个txt文件2.Python读取一个未知编码的文件并将其设置为指定编码格式3.Python实现txt文件中字符串的替换 1.Python读取一个txt文件的内容并将其写入到另一个txt文件 # -*- encoding:gb2312 -*- import chardetdef read_…

Linux命令awk详细用法

简介 awk 是一种强大的文本处理工具,用于在命令行环境下对文件或数据流进行逐行处理和分析。它是由 Alfred Aho、Peter Weinberger 和 Brian Kernighan 在 1977 年开发的,并以他们三人的姓氏命名。awk 在 Unix/Linux 系统中非常常见,也有 Win…

代码随想录算法训练营之JAVA|第四十一天|139. 单词拆分

今天是第 天刷leetcode,立个flag,打卡60天。 算法挑战链接 139. 单词拆分https://leetcode.cn/problems/word-break/ 第一想法 看完之后完全没有想法。 看完代码随想录之后的想法 这是一个完全背包的问题,使用完全背包的解法。 单词就…

leetcode7.整数反转-Java

题目 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 7. 整数反转 - 力扣&a…

栈和队列(优先级队列)

一)删除字符串中所有相邻字符的重复项 1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode) 算法原理:栈结构模拟,只是需要遍历所有字符串中的字符,一次存放到栈里面即可,也是可以使用数组来模拟一个栈结构的: class…

RabbitMQ从原理到实战—基于Golang【万字详解】

文章目录 前言一、MQ是什么?优势劣势 二、MQ的用途1、应用解耦2、异步加速3、削峰填谷4、消息分发 三、RabbitMQ是什么1、AMQP 协议2、RabbitMQ 包含的要素3、RabbitMQ 基础架构 四、实战1、Simple模式(即最简单的收发模式)2、Work Queues 模型3、Publish/Subscribe…

如何查询Oracle的字符集

如何查询Oracle的字符集 很多人都碰到过因为字符集不同而使数据导入失败的情况。这涉及三方面的字符集,一是oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做数据导入的时候,需要这三个字符集都一致才能正确…

Java学习笔记32——字符缓冲流

字符缓冲流 字符流字符缓冲流字符缓冲流的特有功能 IO流小结字节流字符流 字符流 字符缓冲流 BufferedWriter:将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入,可以指定缓冲区大小,或者可以接…