【Python机器学习】算法链与管道——用预处理进行参数选择的注意项

news2024/11/20 8:44:06

对于许多机器学习算法,提供的特定数据表示非常重要。比如,首先对数据进行缩放,然后手动合并特征,再利用无监督机器学习来学习特征。因此,大多数机器学习应用不仅需要应用多个算法,而且还需要将许多不同的处理步骤和机器学习模型链接在一起。

使用Pipeline类可以简化构建变换和模型链的过程。

我们知道可以通过MinMaxScaler进行预处理来打打提高核SVM在cancer数据集上的性能,下面代码实现了数据划分、计算最小值最大值、缩放数据和训练SVM:

import mglearn.plots
from sklearn.svm import SVC
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler

cancer=load_breast_cancer()
#加载并划分数据
X_train,X_test,y_train,y_test=train_test_split(cancer.data,cancer.target,random_state=0)
#计算训练数据的最大最小值
scaler=MinMaxScaler().fit(X_train)

#对训练数据进行缩放
X_train_scaler=scaler.transform(X_train)
svm=SVC()
#在缩放后的训练数据上学习SVM
svm.fit(X_train_scaler,y_train)
X_test_scaler=scaler.transform(X_test)
print('测试集精度:{}'.format(svm.score(X_test_scaler,y_test)))

现在,如果我们希望利用GridSearchCV知道更好的SVC参数,有一种简单的方法可能如下所示:

from sklearn.model_selection import GridSearchCV

param_grid={'C':[0.001,0.01,0.1,1,10,100],
            'gamma':[0.001,0.01,0.1,1,10,100]}
grid=GridSearchCV(SVC(),param_grid=param_grid,cv=5)
grid.fit(X_train_scaler,y_train)
print('最高精度:{}'.format(grid.best_score_))
print('最高测试集精度:{}'.format(grid.score(X_test_scaler,y_test)))
print('最佳参数:{}'.format(grid.best_params_))

其实实践中是不能这样使用的

这里我们利用缩放后的数据对SVC参数进行网格搜索。但是,上面的代码有个不易察觉的陷阱:

在缩放数据时,我们使用了训练集中的所有数据来找到训练的方法,然后我们使用缩放后的训练数据来运行带交叉验证的网格搜索;对于交叉验证的每次划分,原始数据集的一部分被划分为训练部分,另一部分被划分为测试部分,测试部分用于度量在训练部分上所训练的模型在新数据上的表现。但是,我们在缩放数据时就已经试用过测试部分中所包含的信息。要知道,交叉验证每次划分的测试部分都是训练集的一部分,我们使用整个训练集的信息来找到数据的正确缩放。

对于模型来说,这些数据与新数据看起来截然不同。如果我们观察新数据集,那么这些数据并没有用于对训练数据进行缩放,其最大最小值也可能与训练数据不同。

下面这个例子显示了交叉验证与最终评估这两个过程中数据处理的不同之处:

import matplotlib.pyplot as plt
mglearn.plots.plot_improper_processing()
plt.show()

因此,对于建模过程,交叉验证中的划分无法正确地反映新数据的特征。我们已经将这部分数据的信息“泄露”给建模过程。这将导致在交叉验证过程中得到过于乐观的结果。

为了解决这个问题,在交叉验证的过程中,应该在进行任何预处理之前就完成数据集的划分。任何从数据集中提取信息的过程都应该仅应用于数据集的训练部分,因此,任何交叉验证都应该位于处理过程的“最外层循环”。

在scikit-learn中,要想使用cross_val_score函数和GridSearchCV函数实现这一点,可以使用Pipeline类。Pipeline类可以将多个处理步骤合并为单个scikit-learn估计器。Pipeline类本身具有fit、predict、score方法,其行为与scikit-learn中的其他模型相同。

Pipeline类最常见的用例是将预处理步骤(比如数据缩放)与一个监督模型(比如分类器)链接在一起。

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

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

相关文章

BIOS中的设置虽然不少,但其实大部分时候只需进行一些简单的调整

序言 浏览BIOS可能会让人感到不知所措,因为要考虑的设置太多了。但是,你应该在BIOS中进行一些简单的调整,以提高系统的性能和稳定性。我们将向你展示其中的一些调整,并解释你可能想要使用它们的时间和原因。 用密码保护你的BIOS 虽然我们很小心地对用户帐户进行密码保护…

打卡第一天

今天是参加算法训练营的第一天,希望我能把这个训练营坚持下来,希望我的算法编程题的能力有所提升,不再面试挂了,面试总是挂编程题,记录我leetcode刷题数量: 希望我通过这个训练营能够实现两份工作的无缝衔接…

【Spring Boot】Java 持久层 API:JPA

Java 持久层 API:JPA 1.Spring Data1.1 主要模块1.2 社区模块 2.JPA3.使用 JPA3.1 添加 JPA 和 MySQL 数据库的依赖3.2 配置数据库连接信息 4.了解 JPA 注解和属性4.1 常用注解4.2 映射关系的注解4.3 映射关系的属性 5.用 JPA 构建实体数据表 1.Spring Data Spring…

【Linux】多线程(一万六千字)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 线程的概念 线程的理解(Linux系统为例) 在Linux系统里如何保证让正文部分的代码可以并发的去跑呢? 为什么要有多进程呢? 为…

统计信号处理基础 习题解答11-13

题目 如果是一个2x1的随机矢量,具有PDF 证明的PDF是一个随机变量。提可以因式分解成,其中是一个在4.5节描述的白化变换。 解答 首先: 因此,存在: 也就是是Hermitian矩阵。详细的性质可以参考: https://z…

linux系统中的各种命令的解释和帮助(含内部命令、外部命令)

目录 一、说明 二、命令详解 1、帮助命令的种类 (1)help用法 (2)--help用法 2、如何区别linux内部命令和外部命令 三、help和—help 四、man 命令 1、概述 2、语法和命令格式 (1)man命令的格式&…

数据库组成及原理

属性: 把数据库中的一个表类比成一个公司,那么公司里的每个人都是一个“属性”(表中的一个字段视为一个属性),不管老板还是员工,只要是公司里的人,就都是一个属性。 主键: 老板就是“…

带安全启动—Ubuntu系统—手动安装Nvidia驱动

教程1:在启用安全启动的 Fedora 中安装英伟达驱动 教程2:UEFI安全启动模式下安装Ubuntu的NVIDIA显卡驱动 1. 搜索合适的驱动 Nvidia驱动官网 选择这个 驱动(.run)链接 2. 安装必要的软件依赖 CUDA底层用C写的,因此导入编译器 sudo apt i…

智慧课堂基于YOLOv8的学生上课行为检测

数据集 学生上课行为检测,我们直接使用公开数据集 共三类行为:举手、读书、写字 数据集已经按照YOLO格式配置好,数据内容如下 模型训练 ​ 采用YOLOv8模型进行训练,官方代码 首先是划分数据集,分为训练集、验证&a…

Linux-gdb

目录 1.-g 生成含有debug信息的可执行文件 2.gdb开始以及gdb中的常用执行指令 3.断点的本质用法 4.快速跳出函数体 5.其他 1.-g 生成含有debug信息的可执行文件 2.gdb开始以及gdb中的常用执行指令 3.断点的本质用法 断点的本质是帮助我们缩小出问题的范围 比如,…

今天的A股,让人惊愕了,2个耐人寻味的重要信号,有望迎来下一个超级风口!

今天的A股,让人惊愕了,你知道是为什么吗?盘面上出现2个耐人寻味的重要信号,有望迎来下一个超级风口! 1、今天两市低开低走,但大消费劲头十足,连中免这样的大体量都涨停了,另外消费茅…

Linux静态库的制作

Linux操作系统支持的函数库分为: 静态库,libxxx.a,在编译时就将库编译进可执行程序中。 优点:程序的运行环境中不需要外部的函数库。 缺点:可执行程序大 动态库,又称共享库,libxxx.so&a…

探索迁移学习:通过实例深入理解机器学习的强大方法

探索迁移学习:通过实例深入理解机器学习的强大方法 🍁1. 迁移学习的概念🍁2. 迁移学习的应用领域🍁2.1 计算机视觉🍁2.2 自然语言处理(NLP)🍁2.3 医学图像分析🍁2.4 语音…

上海站圆满结束!MongoDB Developer Day深圳站,周六见!

在过去两个周六的北京和上海 我们见证了两站热情高涨的 MongoDB Developer Day! 近200位参会开发者相聚专业盛会 经过全天的动手实操和主题研讨会 MongoDB技能已是Next Level! 最后一站Developer Day即将启程 期待本周六与各位在深圳相见&#xff0…

身边的故事(十三):阿文的故事:出现

如果他知道一件事情如果违背正常的市场规律就是骗局或者存在巨大的风险,比如市场正常投资回报率在5-6%已经算高回报,像股神巴菲特的投资回报率应该不会超过10%吧。那些说20-30%甚至更高回报率肯定是骗局。如果...哪有那么多如果,人生每一秒都…

3D一览通优化供应链协同,加速产品设计研发和上市

在现代企业管理中,供应链管理无疑占据着举足轻重的地位。它不仅是企业资源优化配置的基石,更是企业降低成本、提高效率、满足客户需求、保持市场竞争力的关键环节。对于工业企业来说,供应链的高效运作尤其重要。 然而,在实际操作…

使用ps给gif动图抠图

目录 导入gif图片 打开时间轴 选择图片 魔棒抠图-初步抠图 套索抠图-精准抠图 导入gif图片 打开时间轴 因为gif动图实际上多张图片实现的效果,所以如果要给gif抠图,就得挨个给每个时间线的图片抠图 点击窗口->时间轴 选择图片 在时间轴上选择要…

2024 年人工智能和数据科学的五个主要趋势

引言 2023年,人工智能和数据科学登上了新闻头条。生成性人工智能的兴起无疑是这一显著提升曝光度的驱动力。那么,在2024年,该领域将如何继续占据头条,并且这些趋势又将如何影响企业的发展呢? 在过去几个月,…

If you already have a 64-bit JDK installed ,defined a JAVA_HOME...的错误

今天感觉idea有点卡,修改了一下内存,结果就报这个错误了,网上的解决方案好多,都不行 以下是解决方案 打开 C:\Program Files\JetBrains\IntelliJ IDEA 2024.1.4\bin\jetbrains_client64.exe 把jihuo这个目录下所有的文件都删掉&…

[leetcode hot 150]第三题,无重复字符的最长子串

题目: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串的长度。 可以使用"滑动窗口"的方法来解决这个问题。基本思路如下: 使用两个指针(start和end)来定义一个窗口移动end指针来扩大窗口,直到遇到重复字符如果遇到重复字符,移动s…