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

  • 32
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值