【Python机器学习】算法链与管道——在网格搜索中使用管道

news2024/10/6 8:30:53

在网格搜索中使用管道的工作原理与使用任何其他估计器都相同。

我们定义一个需要搜索的参数网络,并利用管道和参数网格构建一个GridSearchCV。不过在指定参数网格时存在一处细微的变化。我们需要为每个参数指定它在管道中所属的步骤。我们要调节的两个参数C和gamma都是SVC的参数,属于第二个步骤,我们给这个步骤的名称是“SVM”。为管道定义参数网格的语法是为每个参数指定步骤名称,后面加上__(双下划线),然后是参数名称。

因此,要想搜索SVC的C参数,必须使用“SVM__C”作为参数网格字典的键,对gamma参数同理:

param_grid={'svm__C':[0.001,0.01,0.1,1,10,100],
            'svm__gamma':[0.001,0.01,0.1,1,10,100]}

有了这个参数网格,我们就可以像平时一样使用GridSearchCV:

from sklearn.model_selection import GridSearchCV

grid=GridSearchCV(pipe,param_grid=param_grid,cv=5)
grid.fit(X_train,y_train)
print('最好交叉验证精度:{:.2f}'.format(grid.best_score_))
print('在测试集精度:{}'.format(grid.score(X_test,y_test)))
print('最优参数:{}'.format(grid.best_params_))

与前面做的网格搜索不同,现在对于交叉验证的每次划分来说,仅使用训练部分对MinMaxScaler进行拟合,测试部分的信息没有泄露到参数搜索中。

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

在交叉验证中,信息泄露的影响大小取决于预处理步骤的性质。

使用测试部分来估计数据的范围,通常不会产生可怕的影响,但在特征提取和特征选择中使用测试部分,则会导致结果的显著差异。

举例说明信息泄露:

我们考虑一个假想的回归任务,包含从高斯分布中独立采样的100个样本与10000个特征。我们还从高斯分布中对响应进行采样:

import numpy as np

rnd=np.random.RandomState(seed=0)
X=rnd.normal(size=(100,10000))
y=rnd.normal(size=(100,0))

考虑到我们创建数据集的方式,数据X与目标y之间其实是没有任何联系的(他们是独立的),所以应该是不可能从这个数据集中学到任何内容。

现在我们完成下面的工作:首先利用SelectPercentile特征选择从10000个特征中选择信息量最大的特征,然后利用交叉验证对Ridge回归进行评估:

from sklearn.feature_selection import SelectPercentile,f_regression
select=SelectPercentile(score_func=f_regression,percentile=5).fit(X,y)
X_selected=select.transform(X)
print('X_selected.shape:{}'.format(X_selected.shape))

from sklearn.model_selection import cross_val_score
from  sklearn.linear_model import Ridge
print('交叉验证R2(Ridge):{}'.format(np.mean(cross_val_score(Ridge(),X_selected,y,cv=5))))

交叉验证计算得到的R^{2}为0.91,表示是一个非常好的模型。

这显然是不对的,因为我们的数据是完全随机的。这里的特征选择从10000个随机特征中选出了与目标相关性非常好的一些特征。

由于我们在交叉验证之外对特征选择进行拟合,所以它能够找到在训练部分和测试部分都相关的特征。从测试部分泄露出去的信息包含的信息量非常大,导致得到了非常不切实际的结果。

我们将这个结果与正确的交叉验证(使用管道的)进行对比:

pipe=Pipeline([('slect',SelectPercentile(score_func=f_regression,percentile=5)),('ridge',Ridge())])
print('交叉验证R2(管道链):{}'.format(np.mean(cross_val_score(pipe,X,y,cv=5))))

这一次我们得到了负数的R^{2}分数,这表示模型很差。利用管道,特征选择现在位于交叉验证循环内部。也就是说,仅使用了数据的训练部分来选择特征,而不使用测试部分。特征选择找到的特征在训练集中与目标相关,但是由于数据是完全随机的,这些特征在测试集中并不与目标相关。

在这个例子中,修正特征选择中的数据泄露问题,结论也由“模型表现很好”变为“模型根本没有效果”。

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

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

相关文章

NGINX+KEEPALIVED | 一文搞懂NG+KL负载均衡高可用架构的实操教程(详细)

文章目录 NGINXKEEPALIVED负载均衡高可用架构为什么需要多节点应用为什么需要Nginx服务为什么需要Keepalived服务NGKL简述前期准备Linux服务器公共环境配置Server1 NGKL服务器配置Server2 NGKL服务器配置Server3 HTTP服务器配置Server4 HTTP服务器配置运行测试用例 NGINXKEEPAL…

Android选择题界面的设计——线性布局实操

目录 任务目标任务分析任务实施 任务目标 使用TextView、Button、CheckBox等实现一个选择题界面,界面如图1所示。 图1 选择题界面效果图 任务分析 上述界面可以分解为上下两部分,上面部分可以使用横向的线性布局来完成,下面部分可以使用…

WPF真入门教程34--爆肝了【仓库管理系统】

1、项目介绍 本项目是一个基于C#WPF实现的仓库管理系统,系统规模较小,适合入门级的项目练练手,但项目还是具有较高的学习价值,它采用mvvmlight框架,EF框架,WPF前端等技术构成。对于学习来说,可…

2024科技文化节程序设计竞赛

补题链接 https://www.luogu.com.cn/contest/178895#problems A. 签到题 忽略掉大小为1的环&#xff0c;答案是剩下环的大小和减环的数量 #include<bits/stdc.h> #include<iostream> #include<cstdio> #include<vector> #include<map> #incl…

基于深度学习网络的USB摄像头实时视频采集与火焰检测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 将usb摄像头对准一个播放火焰的显示器&#xff0c;然后进行识别&#xff0c;识别结果如下&#xff1a; 本课题中&#x…

巴图自动化Profinet协议转Modbus协议网关模块连接智能仪表与PLC通讯

一、功能及优势&#xff1a;巴图自动化Profinet协议转Modbus协议网关模块&#xff08;BT-MDPN10&#xff09;的主要功能是实现Modbus协议和Profinet协议之间的转换和通信。Profinet协议转Modbus协议网关模块&#xff08;BT-MDPN10&#xff09;集成了Modbus和Profinet两种协议以…

linux——IPC 进程间通信

IPC 进程间通信 interprocess communicate IPC&#xff08;Inter-Process Communication&#xff09;&#xff0c;即进程间通信&#xff0c;其产生的原因主要可以归纳为以下几点&#xff1a; 进程空间的独立性 资源隔离&#xff1a;在现代操作系统中&#xff0c;每个进程都…

《野孩子》:撤档背后的故事与思考

《野孩子》&#xff1a;撤档背后的故事与思考 2024年7月&#xff0c;一部备受期待的电影《野孩子》原定于全国上映&#xff0c;却因后期进度原因不得不宣布撤档。这部电影由知名导演殷若昕执导&#xff0c;当红小生王俊凯领衔主演&#xff0c;讲述了两个命运相似的少年相依为命…

“proxy_pass“ directive is duplicate

后面发现是nginx.conf里面proxy pass这里有两个&#xff0c;注释其中一个并重新运行即可&#xff01;

【QT】常用控件|QLabel|QLCDNumber|QProgressbar|QCalenderWidget

目录 ​编辑 QLabel 核心属性 testFormat 自适应pixmap 文本对齐&#xff0c;换行 Buddy QLCDNumber 核心属性 倒计时 处理槽函数 QProgressbar 核心属性 QCalendarWidget 核心属性 核心信号 QLabel 用来显示文本和图片 核心属性 属性作用textFormat 文本的格…

CSS-实例-div 水平居中 垂直靠上

1 需求 2 语法 3 示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>表格水平居中、垂直靠上示例…

2023年问界M9 EV 问界M9增程维修手册和电路图线路图资料更新

此次更新了2023年问界M9 EV及问界M9增程维修手册和电路图资料&#xff0c;覆盖市面上99%车型&#xff0c;包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对照表位置等等&#…

python-计算矩阵边缘元素之和(赛氪OJ)

[题目描述] 输入一个整数矩阵&#xff0c;计算位于矩阵边缘的元素之和。 所谓矩阵边缘的元素&#xff0c;就是第一行和最后一行的元素以及第一列和最后一列的元素。输入&#xff1a; 输入共 m 1 行。 第一行包含两个整数 m, n (1 < m,n < 100) &#xff0c;分别为矩阵的…

力扣双指针算法题目:移动零

1.题目 . - 力扣&#xff08;LeetCode&#xff09; 2.思路解析 这个题目的思路和“使用递归排序快速排序解决数组的排序问题”相同 class solution { public:void QuickSort(vector<int>& nums, int left, int right){if (left > right) return;int key left…

邮件发送失败DKIM报错问题排查解决的方案?

邮件发送DKIM验证失败的排查方法&#xff1f;DKIM的设置步骤&#xff1f; DKIM作为一种验证机制&#xff0c;帮助确保电子邮件的发件人身份验证和邮件内容完整性。然而&#xff0c;发信时可能会遇到DKIM相关的问题&#xff0c;导致邮件发送失败或报错。AokSend将探讨常见的邮件…

电脑端适用何种便签app 精选电脑桌面便签推荐

在数字化时代&#xff0c;电脑已成为我们日常办公不可或缺的工具。在使用电脑办公的同时&#xff0c;我们经常需要随时记录一些重要信息或工作事项。此时&#xff0c;如果能有一款便捷、高效的桌面便签软件&#xff0c;无疑会大大提升我们的工作效率。想象一下&#xff0c;在繁…

SimpleDateFormat 处理带有毫秒的时间字符串转化为时间不准的问题

SimpleDateFormat 处理带有微秒的字符串转化为时间会导致不准确 下面是代码示例&#xff1a; public static void main(String[] args) throws Exception{String timeStampStr "2024-07-04 10:11:34.800017";System.out.println("带毫秒的时间格式: " …

SAP MARA-VPSTA PSTAT 值的意义

参考 https://www.cnblogs.com/VerySky/articles/2851312.html

Stable Diffusion新手快速入门教程,从0到1,AI绘画最基础教程!

关于Ai绘画&#xff0c;很多人在体验了Midjourney&#xff08;以下简称MJ&#xff09;之后&#xff0c;发现它创意能力很强&#xff0c;但可控性比较弱&#xff0c;不便应用&#xff0c;于是转向Stable Diffussion&#xff08;以下简称SD&#xff09;&#xff0c;但又发现SD貌似…

秒懂设计模式--学习笔记(7)【结构型-门面模式】

目录 6、门面模式6.1 介绍6.2 一键操作6.3 亲自下厨的烦扰6.4 化繁为简6.5 整合共享6.6 门面模式的各角色定义 6、门面模式 6.1 介绍 门面模式&#xff08;Facade&#xff09;可能是最简单的结构型设计模式它能将多个不同的子系统接口封装起来&#xff0c;并对外提供统一的高…