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

最近在跟着参考书利用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

相关推荐
Chef_Chen1 小时前
从0开始学习机器学习--Day33--机器学习阶段总结
人工智能·学习·机器学习
databook1 小时前
『玩转Streamlit』--布局与容器组件
python·机器学习·数据分析
肖永威2 小时前
CentOS环境上离线安装python3及相关包
linux·运维·机器学习·centos
IT古董4 小时前
【人工智能】Python在机器学习与人工智能中的应用
开发语言·人工智能·python·机器学习
机器人虎哥5 小时前
【8210A-TX2】Ubuntu18.04 + ROS_ Melodic + TM-16多线激光 雷达评测
人工智能·机器学习
罗小罗同学7 小时前
医工交叉入门书籍分享:Transformer模型在机器学习领域的应用|个人观点·24-11-22
深度学习·机器学习·transformer
孤独且没人爱的纸鹤8 小时前
【深度学习】:从人工神经网络的基础原理到循环神经网络的先进技术,跨越智能算法的关键发展阶段及其未来趋势,探索技术进步与应用挑战
人工智能·python·深度学习·机器学习·ai
羊小猪~~8 小时前
tensorflow案例7--数据增强与测试集, 训练集, 验证集的构建
人工智能·python·深度学习·机器学习·cnn·tensorflow·neo4j
不去幼儿园9 小时前
【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
人工智能·python·算法·机器学习·强化学习
无脑敲代码,bug漫天飞10 小时前
COR 损失函数
人工智能·机器学习