对sklearn中transform()和fit_transform()的深入理解

2023-11-05

       在用机器学习解决问题时,往往要先对数据进行预处理。其中,z-score归一化和Min-Max归一化是最常用的两种预处理方式,可以通过sklearn.preprocessing模块导入StandardScaler()和 MinMaxScaler()接口实现,而在调用这两个接口时,有三种方法:fit(), fit_transform() , transform()。

但是,查阅了许多博客以及官方文档,都没有把这几个函数的区别讲清楚。

因此,今天花了半天时间,把这个问题探索清楚。

时间紧张的朋友可以直接跳到第四节去看结论,第一节到第三节是作者结合某个数据集进行验证的过程。

还是先提一下这两个归一化方法。

z-score归一化: x = (x - x的均值)/ x的方差

Min-Max归一化: x = (x - x的最小值) / (x的最大值 - x的最小值)       

官方文档:

只有两行文字解释,说了等于没说,。。。= =

So, 下面通过实验来验证。为了让文章更简洁,这里只挑选了项目中的部分代码。

一、处理数据

1、通过 fit_transform() 对训练集进行归一化,这里采用Min-Max归一化

minmaxscaler = MinMaxScaler()
data_train_norm = minmaxscaler.fit_transform(data_train)
data_train_norm = pd.DataFrame(data_train_norm, columns=new_column_name)
data_train_norm.head(3)

 2、分别通过调用 fit_transform() 和 transform()处理测试集

data_test_norm_transform = minmaxscaler.transform(data_test)
data_test_norm_transform = pd.DataFrame(data_test_norm_transform, columns=new_column_name)
data_test_norm_fit_transform = minmaxscaler.fit_transform(data_test)
data_test_norm_fit_transform = pd.DataFrame(data_test_norm_fit_transform, columns=new_column_name)

2.1  fit_transform()的结果:

2.2   transform()的结果:

       大家肯定已经发现了,这两个方法产生的结果是不一样的,让我们用密度图画出这三个结果的分布。这边只展示前六列数据的分布图。

      黑线:训练集上fit_transform()后的结果
      红线:测试集上fit_transform()后的结果
      绿线:测试集上transform()后的结果

      可以发现,绿线波峰的位置和黑线是相同的,而红线波峰的位置却不一定和黑线相同

二、猜测

猜想一:transform() : 在对测试集上的数据进行归一化时,使用的是训练集的最小值和最大值

猜想二:fit_transform():用自己的最小值和最大值进行归一化

三、验证猜想

3.1  验证猜想二

不用sklearn的方法,手动编程。在归一化测试集时,使用测试集自己的最小值和最大值

((data_test - data_test.min()) / (data_test.max()-data_test.min())).head(3)

 对比2.1节的结果,可以看到两者是相同的。

所以猜想二正确。

3.2  验证猜想一

在归一化测试集时,使用训练集的最小值和最大值

((data_test - data_train.min()) / (data_train.max()-data_train.min())).head(3)

对比2.2节的结果,发现手动编程的结果与用sklearn中transform()的结果是相同的。

所以猜想一正确。

四、总结

       在用机器学习解决问题时,会将数据集划分成训练集和测试集。我们可以先用fit_transform()方法处理训练集,再用transform()方法处理测试集。这时,在归一化测试集时,使用的是训练集的统计量,这么做是为了让训练集和测试集更相似。使算法在两者上的表现尽可能相同

        而若对测试集使用了fit_transform()方法,则会用测试集自己的统计量来归一化数据。

        在测试集上千万不要混用这两个方法,笔者就因为在测试集上使用了fit_transform()方法,导致测试集上的损失一直比验证集上的大很多!

         还有一个fit()方法没说,这个是最简单的,它和fit_transform()是相同的,只不过后者会返回转换后的结果,而前者是不会返回的,只会训练转换器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对sklearn中transform()和fit_transform()的深入理解 的相关文章

随机推荐

  • 生活中那些六 “有” 的人

    1 有承诺 一些事情开始的时候总会有些协议与约定 我们称其为承诺 我们必须遵守承诺 即使是约会也要遵守 也不能迟到 迟到这件事不但会妨碍我们所有人 还意味着迟到者不尊重大家的时间 这种约定从某种意义上来讲也是承诺 如果你来晚了 这就表示你的
  • 蓝桥杯考生规则

    2017年模拟赛 本科组 考生须知 l 考试开始后 选手首先下载题目 并使用考场现场公布的解压密码解压试题 l 考试时间为4小时 时间截止后 提交答案无效 l 在考试强制结束前 选手可以主动结束考试 需要身份验证 结束考试后将无法继续提交或
  • java计算机毕业设计火车订票系统源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计火车订票系统源码 mysql数据库 系统 lw文档 部署 java计算机毕业设计火车订票系统源码 mysql数据库 系统 lw文档 部署 本源码技术栈 项目架构 B S架构 开发语言 Java语言 开发软件 idea
  • Tomcat调优

    问题定位 对于Tomcat的处理耗时较长的问题主要有当时的并发量 session数 内存及内存的回收等几个方面造成的 出现问题之后就要进行分析了 1 关于Tomcat的session数目 这个可以直接从Tomcat的web管理界面去查看即可
  • Go语言学习13-类型转换

    类型转换 引言 类型转换 1 概念 2 数值类型之间的转换 3 与string类型相关的转换 4 别名类型值之间的转换 结语 引言 在上一篇博文中 我们介绍了 Go 语言的 数据的使用 本篇博文 我们将介绍 Go 语言的类型转换 类型转换
  • HTTP头的Expires与Cache-control

    1 概念 Cache control用于控制HTTP缓存 在HTTP 1 0中可能部分没实现 仅仅实现了Pragma no cache 数据包中的格式 Cache Control cache directive cache directiv
  • 程序员的十个等级

    转载自 http blog csdn net fx0000001 article details 50397265 如果你还迷茫请看这里 如果你很牛逼请看这里 如果你很自傲请看这里 总有你想学会的 自西方文艺复兴以来 中国在自然科学方面落后
  • 不带头结点的单链表

    建立结构体 和带头结点但单链表一样 按需建立即可 我以建立一个储存学生信息的链表举例 typedef struct node char name 20 int number struct node next Node LinkList 单链
  • 探索全桥电机驱动模块:实现精确控制与高效驱动

    全桥电机驱动模块是一种在现代工程应用中广泛使用的电机驱动方式 对于需要精确控制和高效驱动的场景 如机器人 无人机 电动车等 全桥电机驱动模块提供了理想的解决方案 本文将介绍全桥电机驱动模块的原理和实际应用场景 并对几种常见的全桥驱动芯片进行
  • csdn的Markdown行首缩进的两种方法,非常全

    csdn的行首缩进 鉴于不同编辑器的Markdown语法略微不同 故缩进也略不同 1 特殊占位符 不缩进 行首缩进 nbsp 行首缩进 160 四分之一中文占位符 行首缩进 8197 四分之一中文占位符 行首缩进 ensp 行首缩进 819
  • Spring中Bean的生命周期

    Spring Bean的生命周期是从Bean 实例化之后 即通过反射创建出对象之后 到Bean成为一个完整对象 最终存储到单例池中 这个过程被称为Spring Bean的生命周期 Spring Bean的生命周期大体上分为四个阶段 实例化
  • vue2.0项目调用多个IP接口

    项目中经常遇到跨域问题 最简单的方式就在本地配置代理 可偶尔遇到一个页面里面需要调用来自两个以上不同IP段的接口 多个IP要怎么配置代理呢 请往下看 在项目目录 config index js文件配置代理 module exports de
  • pytest

    一 pytest是单元测试框架 单元测试 对软件开发中 对软件的最小单位 函数 方法 进行正确性检查测试 java框架 jnuit和testing python框架 unittest和pytest 流程 i 测试发现 从多个文件中找到测试用
  • 英俊飘逸气宇轩昂——同人立绘征集大赛凤九天·金奖

    导语 本期介绍的作品是由来自江西科技师范大学的计世平设计的凤九天形象 荣获了本次大赛凤九天组别的金奖 2020年12月22日 由首都版权协会联合全国部分高等院校和链游玩家及部分企业共同举办的 2020同人立绘征集大赛 正式启动 并于2021
  • 详解pop()和push()方法

    pop 是移除堆栈顶部的元素并且返回它的值 push 是把对象压入堆栈的顶部 这里的堆栈不是特指栈 是LinkedList中特有的方法 LinkedHashset和LinkedHashMap ArrayList中没有此方法 下面是个小李子
  • Unity UV 水效果实现

    Unity UV 水效果实现 Unity Water Shader 组件搭载 基本参数调节 所需图片 效果呈现 Unity Water Shader Shader Custom SeaWave Properties WaterTex 水纹理
  • 潘周聃之Python分聃 -----数字雨加入潘周聃运动曲线

    作者 勇敢di牛牛 个人项目地址 englishlearningapp 个人简介 有一年工作经验的大学生 工作 汽车系统应用开发 阿里集团 个人网站 牛牛 小窝 独学而无友 则孤陋而寡闻 前言 相信各位同学最近一定被潘周聃刷屏和洗脑了 互联
  • seaborn可视化——一文搞懂heatmap参数

    文章目录 data cmap linewidths linecolor square ax annot 指定为True 指定为同形状数组 vmax vmin annot kws mask xticklabels yticklabels 设置
  • linux 命令 ls 与 ls -lrt 的区别

    ls lrt 表示按修改时间倒序列出当前工作目录下的文件 ls l 表示按名称顺序正序列出当前工作目录下的文件 1 ls 表示列出当前目录下的文件 后面的 lrt 是这个命令的一些选项补充 lrt 实际上是代表了 l r t 这三个选项集合
  • 对sklearn中transform()和fit_transform()的深入理解

    在用机器学习解决问题时 往往要先对数据进行预处理 其中 z score归一化和Min Max归一化是最常用的两种预处理方式 可以通过sklearn preprocessing模块导入StandardScaler 和 MinMaxScaler