机器学习中,fit_transform,fit,transform三个函数的区别和作用

2023-10-30

写在前面
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)
1
2
3
4
2. 各种算法的fit,transform方法
举两个例子:
1. CountVectorizer举例,sklearn的CountVectorizer库是根据输入数据获取词频矩阵(稀疏矩阵)
fit(raw_documents) :根据CountVectorizer参数规则进行操作,比如滤除停用词等,拟合原始数据,生成文档中有价值的词汇表;

transform(raw_documents):使用符合fit的词汇表或提供给构造函数的词汇表,从原始文本文档中提取词频,转换成词频矩阵。

fit_transform(raw_documents, y=None):学习词汇词典并返回术语 - 文档矩阵(稀疏矩阵)。

2. 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(使用前将#替换为@)

机器学习中,fit_transform,fit,transform三个函数的区别和作用 的相关文章

随机推荐

  • C#泛型List删除多个元素的方法

    泛型List如果删除一个 很简单 直接 RemoveAt index 即可 但如果有多个元素 那么删除起来并不是特别简单 需要使用 for 循环的倒叙删除 例子如下 class Program public class Students p
  • windows10安装linux环境

    Windows里玩转Linux 目标 一般的做法 神仙般的做法 可能会遇到的问题 目标 想要在windows里玩转linux 一般的做法 在windows里安装vmware或virtual box 新建一个虚拟机 在虚拟机里通过iso安装l
  • Python ttkbootstrap 制作账户注册信息界面

    前言 ttkbootstrap 是一个基于 tkinter 的界面美化库 使用这个工具可以开发出类似前端 bootstrap 风格的 tkinter 桌面程序 ttkbootstrap 不仅有丰富的案例 同时还有完善的官方文档 可惜是英文的
  • 宽高都200px的div在浏览器窗口居中(水平垂直都居中)

    1 fixed 从中间移动定位 position fixed width 200px height 200px left 50 top 50 margin left 100px margin top 100px 第一行设置完 盒子的左上角的
  • 国茂股份全面迁移到亚马逊云科技,降本增效,驱动业务增长

    亚马逊云科技宣布 中国通用机械工业减速机行业的标杆企业江苏国茂股份有限公司 简称 国茂股份 正在全面迁移到亚马逊云科技 在中国大陆 西云数据运营宁夏区域 光环新网运营北京区域 将ERP 企业资源计划系统 APS 高级计划与排程系统 MES
  • Docker安装使用阿里云镜像

    registry mirrors https kfwkfulq mirror aliyuncs com https 2lqq34jg mirror aliyuncs com https pee6w651 mirror aliyuncs co
  • 【满分】【华为OD机试真题2023 JS】最小的调整次数

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 最小的调整次数 知识点队列栈 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 有一个特异性的双端队列 该队列可以从头部或尾部添加数据 但是只能从头部移出数据 小A
  • dns服务器响应 异常,DNS云学堂|快速定位DNS解析异常问题,牢记这四种DNS状态码...

    DNS的状态码在进行故障排查的时候起着至关重要的作用 在DNS的维护中会经常遇到DNS解析异常问题 通过DNS的状态码可以初步判断DNS解析的异常问题 本期云学堂通过详解DNS状态码的定义 给出常见状态码的场景举例 enjoy 写在前面 本
  • (一)Matlab三日基础入门——矩阵和数组

    目录 创建数组 方式一 直接创建 方式二 调函数创建 zeros 功能 创建由0组成的数组 ones 功能 创建由1组成的数组 rand 功能 创建 0 1 之间均匀分布的随机数生成的数组 矩阵和数组运算 单一运算符 转置 行列互换 计算矩
  • [leetcode]刷题--关于位运算的几道题

    1 位运算的本质 其实是对二进制补码储存形式的修改 位运算常见的运算符为 lt lt 左移n个位置 算数移位 符号位不变 gt gt 右移动n个位置 采用直接丢弃末尾数字的方法 符号位不变 移位都是算数移位 按位取反 对于包括符号位在内全部
  • 两种公钥加密算法——Merkle-Hellman背包、RSA

    今天看了一些加密体制 很厉害 佩服之余顺便总结下公钥 对称密钥很多啊 历史比较有名的有DES AES RC系列 水平不够说不清楚 所以不写了 自己以后也要看 所以尽量通俗易懂 其实是不怎么会很官方很学术 顺道说 明天就七夕了 我还在搞些啥跟
  • ubuntu 20.04.4编译 继续尝试编译Android 12,13

    之前使用虚拟机编译过Android10 现在开始记录编译12 上次忘记给镜像了这次补上镜像ubuntu 20 04 4 desktop amd64 链接 https pan baidu com s 1REJ2cIJyqupLRQjN9SW0
  • 深搜Dfs遍历节点以及寻路

    深搜遍历从起点出发能走的所有节点 对于一个节点 只要发现了没走过的点就走到它 如果有多个点可走就任选一个 递归调用 由于是从起点开始遍历 因此遍历过程也是产生路径的过程 因此深搜遍历是有路径信息的 单纯的根据数据结构遍历所有点是没有路径信息
  • 关于ABAP批次或生产订单特性值的随记

    阅读目录 特性值 后台表 批次特性值 生产订单特性值 特性值 特性值是为了控制一些特定属性 特性字段可以在SAP里配置 以方便管控物料或者订单 后台表 特性值涉及到的SAP后台表有 CABN CABNT CAWN CAWNT KSML KL
  • Vue、Vue CLI、Webpack 和 Webpack CLI 的版本兼容对照表

    Vue Vue CLI Webpack 和 Webpack CLI 的版本兼容对照表 Vue Vue 2 x x Webpack 3 x Vue Loader 14 x Vue 3 x x Webpack 4 x Vue Loader 15
  • 基于MQTT协议的 org.eclipse.paho.client.mqttv3 源码学习(二)

    http blog csdn net chenbifeng article details 25067761 一 主要类介绍 二 重点类代码分析 对于长连接 一般是直接从消息的接收和发送类开始读 上面知道paho中消息发送和接收是在Comm
  • axios从入门到源码分析

    axios是什么 axios 基于promise封装的ajax库 基于这个类库发送ajax请求 默认就是基于promise管理的 核心还是XMLHttpRequest axios中文文档8 axios中文网 axios axios中GET系
  • NRF24L01跳频抗信道干扰功能探讨

    接触到此问题是由于在一个项目中使用了Si24R1 1主机发四从机收 调试过程中发现从机接收会丢包 40包丢2包 查阅资料发现可能是因为外部其他2 4G设备 比如蓝牙 WiFi 干扰信号 实测将速率从1M下降到250k 并且将信道调整到120
  • 解决spring-boot-configuration-processor导入之后,任没有提示问题

    解决spring boot configuration processor导入之后 任没有提示问题 在检查之后得出 idea在导入spring boot configuration processor依赖之后 任然没有提示 在检查pom文件
  • 机器学习中,fit_transform,fit,transform三个函数的区别和作用

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