sklearn中fit_transform,transform和fit函数的区别和作用详解

2023-11-09

写在前面

  • fit和transform没有任何关系,仅仅是数据处理的两个不同环节,之所以出来fit_transform这个函数名,仅仅是为了写代码方便,会高效一点。

  • sklearn里的封装好的各种算法使用前都要fit,fit相对于整个代码而言,为后续API服务。fit之后,然后调用各种API方法,transform只是其中一个API方法,所以当你调用transform之外的方法,也必须要先fit。

  • fit原义指的是安装、使适合的意思,其实有点train的含义,但是和train不同的是,它并不是一个训练的过程,而是一个适配的过程,过程都是确定的,最后得到一个可用于转换的有价值的信息。

fit,transform,fit_transform常用情况分为两大类

1. 数据预处理中方法

  • fit(): Method calculates the parameters μ and σ and saves them as internal objects.
    解释:简单来说,就是求得训练集X的均值,方差,最大值,最小值,这些训练集X固有的属性。

  • transform(): Method using these calculated parameters apply the transformation to a particular dataset.
    解释:在fit的基础上,进行标准化,降维,归一化等操作(看具体用的是哪个工具,如PCA,StandardScaler等)。

  • fit_transform(): joins the fit() and transform() method for transformation of dataset.
    解释:fit_transform是fit和transform的组合,既包括了训练又包含了转换。
    transform()和fit_transform()二者的功能都是对数据进行某种统一处理(比如标准化~N(0,1),将数据缩放(映射)到某个固定区间,归一化,正则化等)

    fit_transform(trainData)对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),然后对该trainData进行转换transform,从而实现数据的标准化、归一化等等。

根据对之前部分trainData进行fit的整体指标,对剩余的数据(testData)使用同样的均值、方差、最大最小值等指标进行转换transform(testData),从而保证train、test处理方式相同。所以,一般都是这么用:

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit_tranform(X_train)
sc.tranform(X_test)

2. 各种算法的fit,transform方法

  • 举两个例子:
    • CountVectorizer举例,sklearn的CountVectorizer库是根据输入数据获取词频矩阵(稀疏矩阵)

      • fit(raw_documents) :根据CountVectorizer参数规则进行操作,比如滤除停用词等,拟合原始数据,生成文档中有价值的词汇表;在这里插入图片描述

      • transform(raw_documents):使用符合fit的词汇表或提供给构造函数的词汇表,从原始文本文档中提取词频,转换成词频矩阵。在这里插入图片描述

      • fit_transform(raw_documents, y=None):学习词汇词典并返回术语 - 文档矩阵(稀疏矩阵)。在这里插入图片描述

    • TfidfTransformer举例,TF-IDF(Term frequency * Inverse Doc Frequency)词权重
      在较低的文本语料库中,一些词非常常见(例如,英文中的“the”,“a”,“is”),因此很少带有文档实际内容的有用信息。如果我们将单纯的计数数据直接喂给分类器,那些频繁出现的词会掩盖那些很少出现但是更有意义的词的频率。

      为了重新计算特征的计数权重,以便转化为适合分类器使用的浮点值,通常都会进行tf-idf转换。词重要性度量一般使用文本挖掘的启发式方法:TF-IDF。IDF,逆向文件频率(inverse document frequency)是一个词语普遍重要性的度量(不同词重要性的度量)。

      • fit(raw_documents, y=None):根据训练集生成词典和逆文档词频 由fit方法计算的每个特征的权重存储在model的idf_属性中。在这里插入图片描述

      • transform(raw_documents, copy=True):使用fit(或fit_transform)学习的词汇和文档频率(df),将文档转换为文档 - 词矩阵。返回稀疏矩阵,[n_samples, n_features],即,Tf-idf加权文档矩阵(Tf-idf-weighted document-term matrix)。在这里插入图片描述

总结:

上述第一类和第二类等价。算法中的fit方法的应用等价于第一类的fit,只不过产生的结果意义不同(不是均值等统计意义,而是根据算法本身拟合获取不同信息以备后用),transform根据fit的结果转换成目标形式,具体需深究代码实现。

Note:

  • 必须先用fit_transform(trainData),之后再transform(testData)
  • 如果直接transform(testData),程序会报错
  • 如果fit_transfrom(trainData)后,使用fit_transform(testData)而不transform(testData),虽然也能归一化,但是两个结果不是在同一个“标准”下的,具有明显差异。(一定要避免这种情况)

附: 另一个角度理解fit和transform

fit_transform是fit和transform的结合,所以只需要了解fit和transform。

transform方法主要用来对特征进行转换。

从可利用信息的角度来说,转换分为无信息转换和有信息转换。

  • 无信息转换是指不利用任何其他信息进行转换,比如指数、对数函数转换等。
  • 有信息转换从是否利用目标值向量又可分为无监督转换和有监督转换。
    • 无监督转换指只利用特征的统计信息的转换,统计信息包括均值、标准差、边界等等,比如标准化、PCA法降维等。
    • 有监督转换指既利用了特征信息又利用了目标值信息的转换,比如通过模型选择特征、LDA法降维等。

所以,只有有信息的转换类的fit方法才实际有用,显然fit方法的主要工作是获取特征和目标值有价值的信息,在这点上,fit方法和模型训练时的fit方法就能够联系在一起了:都是通过分析特征和目标值,提取有价值的信息。对于转换类来说是某些统计量;对于模型来说可能是特征的权值系数等

  • 另外,只有有监督的转换类的fit和transform方法才需要特征和目标值两个参数,即有监督学习的算法fit(x,y)传两个参数。
  • 无监督学习的算法是fit(x),即传一个参数,比如降维、特征提取、标准化。
  • fit方法无用不代表其没实现,而是除合法性校验以外,其并没有对特征和目标值进行任何处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sklearn中fit_transform,transform和fit函数的区别和作用详解 的相关文章

随机推荐

  • C#知识系列:GCHandleType的作用

    总结 Normal 对象被标记为完全不被GC管理的状态 但会被GC移动内存位置 需要我们手动调用Free来释放对应的GC对象 Pinned 对象被标记为完全不被GC管理的状态 不被GC回收也不被GC移动内存地址 需要我们手动调用Free来释
  • 探究Cache缓存功能---【pytest】

    前言 pytest运行完用例之后会生成一个 pytest cache的缓存文件夹 用于记录用例的ids和上一次失败的用例 1 跑自动化时经常会出现这样一个情况 一轮自动化跑完后零星出现了几个失败测试用例 无法断定失败的原因 所以可能需要重新
  • MQTT订阅和发送实战(JAVA)

    本列子使用MQTT EMQX Springboot 1 在pom xml中引入依赖
  • c语言完数并求出输出其因子,找出n之内的完全数, 并输出其因子

    定义 完全数 所有的真因子 即除了自身以外的约数 的和 恰好等于它本身 例如 第一个完全数是6 它有约数1 2 3 6 除去它本身6外 其余3个数相加 1 2 3 6 第二个完全数是28 它有约数1 2 4 7 14 28 除去它本身28外
  • 【Linux】基本指令(上)

    文章目录 前言 什么是操作系统 简单说明 文件 重要 文件之间 指令操作详解 知识点 clear 和 ls pwd cd whoami touch stat rmdir和rm rmdir rm man cp mv cat tac more
  • python应用-工资计算

    工资计算 Author 罗万财 Date 2017 6 8 salary float input 请输入工资 insurance float input 五险一金 diff salary insurance 3500 if diff lt
  • 【深度学习】计算机视觉(十)——Faster RCNN(实践篇)

    文章目录 写在最前面 step1 相关说明 step2 Prerequisites 安装要求 tensorflow gpu 1 安装和测试 2 错误提示 numpy版本 tensorflow版本 TensorRT step3 Install
  • VS code怎么终止正在运行的文件

    很简单 第一种方法 简单 快捷 Shift F5 第二种方法 1 第一步 点击最左侧运行和调试按钮后程序会开始运行 2 可以看到左侧调用堆栈 将鼠标放在下面类目 正在运行处 会出现 停止 按钮 点击即可
  • CSS3_03:各种卡券优惠券模板制作,开箱即用,学得会,用得着

    本文首发于微信公众号 布依前端 微信号 qny 1009 转载请注明出处 原创不易 觉得有用的话 多转发点赞支持 作为前端开发者 经常碰到不规则元素需求 尤其是购物类的优惠券 元素长相怪异 没有接触过就会犯懵 见多识广 会者不难 安利一波这
  • 网页在线视频下载教程(m3u8格式介绍及下载教程)

    简介 m3u8文件是苹果公司使用的HTTP Live Streaming HLS 协议格式的基础 HLS是新一代流媒体传输协议 其基本实现原理为将一个大的媒体文件进行分片 将该分片文件资源路径记录与m3u8文件 即playlist 内 其中
  • android studio Flutter开发好用的插件

    Dart 必备 Flutter 必备 Flutter Enhancement Suite Flutter代码增强提示 WidgetGenerator 自动生成Widget接口 flutter img sync 自动同步照片路径
  • Hibernate 超简单的一对多和多对一查询

    这里使用的Teacher类和Student类 假设一个Teacher对应多个学生 一个学生对应一个老师 所需jar包 开始建表 1 表名 teacher 2 表名 student 主键都为自增长 创建实体类 Teacher类 package
  • 论文阅读——Temporal Convolutional Attention-based Network For Sequence Modeling

    https arxiv org pdf 2002 12530 pdf 代码 https github com haohy TCAN 用于序列建模的基于注意力的时序卷积网络 作者提出一种时序卷积注意力网络 Temporal Convoluti
  • shell 遍历当前目录以及所有子目录下文件

    bin bash file count 0 folder count 0 function TRAVEL ALL FILE for file in do if f file then normal file echo file file c
  • 干货分享

    如今 随着诸如互联网以及物联网等技术的不断发展 越来越多的数据被生产出来 据统计 每天大约有超过2 5亿亿字节的各种各样数据产生 这些数据需要被存储起来并且能够被方便的分析和利用 随着大数据技术的不断更新和迭代 数据管理工具得到了飞速的发展
  • OpenGL学习——(3)库函数

    1 定义视口 void ChangeSize int w int h glViewport 0 0 w h 代表窗口中视口的左下角坐标是 0 0 通常都是0 0 w和h用像素表示 在窗口改变大小时接收新的宽和高 glViewport主要完成
  • 实战:NodeLocal DNSCache安装-2023.2.23(测试成功)

    实战 NodeLocal DNSCache安装 2023 2 24 测试成功 目录 文章目录 实战 NodeLocal DNSCache安装 2023 2 24 测试成功 目录 本节实战 实验环境 实验软件 0 部署前dns测试 1 获取资
  • Brew的安装路径

    Homebrew 将本机的 usr local 目录初始化为Git的工作树 并将目录所有者变更为 USER 也就是你当前所操作的用户 所以以后的操作都不再需要sudo 这是安全的 全新的OS X默认是没有该目录的 也就是说该目录并非是系统所
  • 图形界面操作pandas:计算变异系数(极差 四分位差 方差 标准差 协方差 变异系数)

    昨天 freepy增加了计算离散程度功能 包括极差 四分位差 方差 标准差 协方差 变异系数 其中 协方差需要指定两个字段 部分运行结果 df apple stock Open 极差 691 29 df apple stock High 四
  • sklearn中fit_transform,transform和fit函数的区别和作用详解

    写在前面 fit和transform没有任何关系 仅仅是数据处理的两个不同环节 之所以出来fit transform这个函数名 仅仅是为了写代码方便 会高效一点 sklearn里的封装好的各种算法使用前都要fit fit相对于整个代码而言