机器学习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

相关推荐
quaer1 分钟前
Open-Sora全面开源?
开发语言·算法·机器学习·matlab·矩阵
墨@#≯25 分钟前
机器学习系列篇章0 --- 人工智能&机器学习相关概念梳理
人工智能·经验分享·机器学习
_.Switch42 分钟前
Python机器学习模型的部署与维护:版本管理、监控与更新策略
开发语言·人工智能·python·算法·机器学习
技术无疆2 小时前
【Python】Streamlit:为数据科学与机器学习打造的简易应用框架
开发语言·人工智能·python·深度学习·神经网络·机器学习·数据挖掘
羊小猪~~2 小时前
机器学习/数据分析--用通俗语言讲解时间序列自回归(AR)模型,并用其预测天气,拟合度98%+
人工智能·python·机器学习·数据挖掘·数据分析·回归·时序数据库
努力的小雨5 小时前
从零开始学机器学习——网络应用
机器学习
凭栏落花侧8 小时前
决策树:简单易懂的预测模型
人工智能·算法·决策树·机器学习·信息可视化·数据挖掘·数据分析
吱吱鼠叔10 小时前
MATLAB计算与建模常见函数:5.曲线拟合
算法·机器学习·matlab
学步_技术15 小时前
自动驾驶系列—全面解析自动驾驶线控制动技术:智能驾驶的关键执行器
人工智能·机器学习·自动驾驶·线控系统·制动系统
大神薯条老师16 小时前
Python从入门到高手4.3节-掌握跳转控制语句
后端·爬虫·python·深度学习·机器学习·数据分析