机器学习python实践——关于数据集划分和数据标准化的相关问题的思考

server/2024/9/23 20:06:19/

最近在跟着参考书利用python进行机器学习实践,但是在实践过程中对数据集划分和数据的标准化产生了一些疑惑,所以,本文想记录并分享一下个人关于这方面的思考,如果有误请见谅,欢迎大家前来一起进行探讨。当然,如果这篇文章还能入得了各位“看官”的法眼,麻烦点赞、关注、收藏,支持一下!

本文主要解释三个问题

1、为什么数据集划分要在数据标准化之前?

2、为什么数据标准化时要用训练集的fit结果对测试集进行transform?

3、是否可以分别对训练集和测试集进行fit?

话不多说,直接进入正文:

一、为什么数据集划分要在数据标准化之前?

举个例子,大家感受一下:

小明是一名光荣的人民教师,他现在手上有两种题,一种是学生平时练习的题目,学生做过,相当于是训练集,另一种是学生没做过得题目,相当于是测试集,两者所蕴含的知识点是否一致的,相当于训练集和测试集是否具有相同的分布

今天是1号,因为3号要出一张卷子对学生进行期末考试来检测学生的学习成果,所以小明计划在2号也出一张卷子来帮助学生巩固学习成果,其中3号的卷子中的题目全部来源于截止1号为止学生没做过的题目,为了更好的出好2号的卷子,小明今天会去搭建一个题库,并且要求题库中的题目所涉及的知识点全都处于教学大纲范围之内,这就相当于是对数据进行标准化处理

如果没有将训练集和测试集分开,两者杂糅,即题库中同时含有学生做过的和没做过的题,那么2号的卷子和3号的卷子就会有一部分的题目重合,也就说在期末考试前,考题泄露了,这就相当于网上很多文章中所说的“数据泄露”,这样小明就无法真实准确的掌握学生的学习情况,因为要想准确的了解学生的学习情况,肯定是要用知识点相同,但是学生没做过的题目来对学生进行测试。因此,如果小明在搭建题库之前,把训练集和测试集分开,让题库中仅含有学生做过的题目,那么3号的试卷就可以真正的掌握学生的学习情况。

通过上述例子,我们可以知道,数据集划分要在数据标准化操作之

二、为什么数据标准化时要用训练集的fit结果对测试集进行transform?

个人理解是为了保证训练集和测试集具有相同的分布

先梳理一下StandardScaler方法,fit()函数,以及transform()函数三者的关系,对于三者的关系,个人理解有点类似于:蓝图、调研、落实

根据帮助文档,我们知道在使用StandardScaler方法分为两个步骤:

第一个步骤:通过fit()函数去获取数据的均值、标准差等信息

第二个步骤:依托fit()函数获取的数据信息,通过transform()来执行相关的操作

然后我继续延用上述的例子进行说明

通过上述的例子,小明知道了在构建数据库时要对数据进行划分,因此,上述例子中的标准化处理,就分成了两步,第一步通过fit函数将训练集中题目的知识点提取出来,第二步根据所提取出来的知识点,用transform函数对训练集中超纲的题目进行修正,让他变得不超纲,同时为了保证3号的试卷中的题目也不超纲,小明也就可以根据训练集的fit结果对测试集进行transform,这样也就保证了3号卷子不会超纲

三、是否可以分别对训练集和测试集进行fit?

我的答案是:不可以!!!

根据我之前写的《机器学习python实践过程中对数据预处理中StandardScaler标准化方法的一些个人思考》一文中可以知道数据标准化处理,其实就是对数据的平移和缩放,使的数据的均值为零,方差为1

假设数据集中有两个数据,我们将其拆分为训练集和测试集,且两者均只有一个数据,训练集中的数据是X1(1,0),测试集中的数据是X2(2,0),X2在X1的右侧。

如果对训练集进行fit,然后根据训练集的fit结果对训练集和测试集进行transform,那么训练集的数据X1(1,0)就变成了X1'(0,0),测试集中的数据X2(2,0)就变成了X2'(1,0),数据集的形态没有发生变化,仅仅是向左发生了平移,这样并不会影响模型的预测的准确性,比如说,我们利用变换后的训练集数据X1'(0,0)算出模型,模型认为X1'和X2'的相对位置就是X1和X2的相对位置,然后将变换后的测试集数据X2'(1,0)带入模型中,于是模型告诉我们X2在X1的右侧,对比原始数据可以知道模型预测结果准确。

但是,如果现在我们分别对训练集和测试集进行fit和transform,最后训练集的数据X1(1,0)就变成了X1'(0,0),测试集中的数据X2(2,0)变成了X2'(0,0),数据集的形态就被改变了,这时利用变换后的训练集数据X1'(0,0)算出的模型还是那个模型,但是我们再将变换后的测试集数据X2'(0,0)带入到模型中,模型告诉我们X2和X1重合,对比原始数据,不难发现,模型预测结果错误

因此,我们不可以分别对训练集和测试集进行fit

skleran官方文档:sklearn.preprocessing.StandardScaler


http://www.ppmy.cn/server/51101.html

相关文章

CP AUTOSAR标准之LSduRouter(AUTOSAR_CP_SWS_LSduRouter)

1 简介和功能概述 本规范描述了AUTOSAR基础软件模块L-SDU路由器的功能、API和配置。L-SDU路由器模块使用以下模块类型提供路由L-SDU(链路层服务数据单元)的服务: 通信接口模块,使用 < Provider:Up > 或 < Provider:Lo > API,例如EthIf、IEEE1722Tp;L-SDU的路由…

面试官:JavaScript执行机制中的闭包?

前言 JavaScript 中的闭包指的是一个函数以及其捆绑的周边环境状态的引用的组合。闭包可以让开发者从内部函数访问外部函数的作用域&#xff0c;即使外部函数已经执行完毕 今天我们通过JavaScript执行机制来聊聊闭包 正文 首先来分析这段代码的执行机制&#xff0c;这段代码…

如何解决跨境传输常见的安全及效率问题?

在当今全球化的商业版图中&#xff0c;企业为了拓展国际市场和增强竞争力&#xff0c;跨境传输数据已成为一项不可或缺的业务活动。合格的数据跨境传输方案&#xff0c;应考虑以下要素&#xff1a; 法律合规性&#xff1a;确保方案符合所有相关国家的数据保护法律和国际法规&am…

LeetCode 3186 最大施法伤害

题目信息 LeetoCode地址: . - 力扣&#xff08;LeetCode&#xff09; 题目理解 这道题很直观&#xff0c;玩游戏的都懂&#xff0c;伤害最大化嘛&#xff01; 但是每个法术释放与否可能会影响总体的伤害&#xff0c;因此是从局部最优解找到全局最优解的动态规划问题&#x…

34.构建核心注入代码

上一个内容&#xff1a;33.获取入口点 以 33.获取入口点 它的代码为基础进行修改 实现的功能是把LoadLibrary函数注入到目标进程实现加载我们的模块。LoadLibrary只有有程序使用过了它的代码就会加载到内存中&#xff08;因为动态链接库是内存加载&#xff09;就是a程序要用L…

VOC数据集

VOC&#xff08;Visual Object Classes&#xff09;格式的数据集是一种用于计算机视觉任务的标准数据集格式&#xff0c;它最初是由Pascal VOC&#xff08;PASCAL Visual Object Classes&#xff09;数据集引入的。VOC数据集格式定义了一套标准化的数据集结构&#xff0c;包括X…

Java热部署:让应用更新如丝般顺滑,告别繁琐重启!

目录 手动启动热部署 自动启动热部署 参与热部署监控的文件范围配置 关闭热部署 什么是热部署&#xff1f;简单说就是你程序改了&#xff0c;现在要重新启动服务器&#xff0c;嫌麻烦&#xff1f;不用重启&#xff0c;服务器会自己悄悄的把更新后的程序给重新加载一遍&…

WordPress插件数据库批量替换内容工具插件

1、安装插件后&#xff0c;我们就可以在后台菜单看到工具操作界面 2、目前支持网站内容、标题、评论指定字符的快速替换 3、可以快速解决以往我们需要从MYSQL数据库命令替换的烦恼