写在前面

  • 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(补缺失值等),从而实现数据的标准化、归一化等等。

为什么测试集上不进行fit(),直接进行transform呢?是因为在trainData的时候,已经使用fit()得到了整体的指标(均值,方差等),所以在测试集上直接transform(),使用之前的指标,如果在测试集上再进行fit(),由于两次的数据不一样,导致得到不同的指标,会使预测发生偏差,因为模型是针对之前的数据fit()出来的标准来训练的,而现在的数据是新的标准,会导致预测的不准确。

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

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit_tranform(X_train)
sc.tranform(X_test)
  1. 各种算法的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方法无用不代表其没实现,而是除合法性校验以外,其并没有对特征和目标值进行任何处理。

原文:https://blog.csdn.net/weixin_38278334/article/details/82971752

fit,transform,fit_transform详解相关推荐

  1. EMD算法之Hilbert-Huang Transform原理详解和案例分析

    目录 Hilbert-Huang Transform 希尔伯特-黄变换 Section I 人物简介 Section II Hilbert-Huang的应用领域 Section III Hilbert ...

  2. 机器学习:fit,transform,fit_transform区别(附代码)

    导论: 在机器学习中,我们需要对数据集的数据进行处理,进而使用sklearn库中的一些函数对数据进行数据特征提取,训练模型,其中fit,transform,fit_transform是进行数据的预处理 ...

  3. scikit_learn中fit()/transform()/fit_transform()区别和联系

    函数功能解释 fit() 根据训练集数据学习得到数据集的特征,比如均值.中位数.标准差等等 transform() 将fit()学到数据集特征,应用到数据集,比如学习到数据集平均数为6,应用到填充数据 ...

  4. html transform属性,css3 transform属性详解

    CSS3变形是一些效果的集合,比如平移translate() .旋转rotate().缩放scare()和倾斜skew()效果,每个效果都被称作为变形函数(Transform Function),它们 ...

  5. pythontransform详解_Python自定义聚合函数merge与transform区别详解

    1.自定义聚合函数,结合agg使用 2. 同时使用多个聚合函数 3. 指定某一列使用某些聚合函数 4.merge与transform使用 import pandas as pd import nump ...

  6. Transform使用详解

    在React Native开发中,我们可以通过Transform的设置来实现组件(包括文字,图像)的变形. 一.四种变形样式 1. 平移(translate)     translateX:沿X轴方向 ...

  7. css transform属性详解

    transform的值: rotate() 旋转 transform:rotate(30deg): translate() 位移 transform:translate(100px,20px): sc ...

  8. CSS3 transform 属性详解

    news多报点 2016-11-18 22:47 写这篇文章是因为在一个前端QQ群里,网友 "小豆豆" (应他要求要出现他的网名......) ,问skew的角度怎么算,因为他看了 ...

  9. Transform结构详解

    Transform 下图是Transform 的整体架构,由decoder和encoder构成,下面分部分对Transform的结构进行分析 (下图来自于论文Attention is all you ...

最新文章

  1. 实验进行中:.NET WebAssembly支持
  2. 资源 | 机器学习必知的15大框架,欢迎补充!
  3. winform 界面设计
  4. 在选择屏幕的标准应用工具条上增加自定义按钮
  5. python教程:dict字典常用方法总结,数据解构(解包)
  6. 使程序不显示在任务栏上
  7. 大牛书单 | 腾讯技术大咖推荐你五一看这些书
  8. 盘点 Python 高手都写不出来的几个错误
  9. 疯狂python讲义pdf_如何自学成Python大神?这份学习宝典火爆 IT 圈!
  10. 现有书形成的网络职业知识体系
  11. kafka安装java,Linux下Kafka单机安装配置方法(图文)
  12. Android电量优化全解析 ,赶快收藏备战金九银十
  13. 三菱凌云3故障代码_三菱故障代码一览表
  14. chm 乱码 掌阅_CHM乱码解决
  15. navicat premium 快捷键
  16. xml 入门 shema_02
  17. 九度OJ 1163 素数
  18. MEMS加速度计性能测评
  19. HTML input 输入限制
  20. 本科计算机应用与技术开发工作会议,计算机科学与技术学院举行本科生迎新大会...

热门文章

  1. 阿里技术人生书籍推荐
  2. xray扫描器的安装及应用
  3. 【WPS】常见WPS数据处理技巧
  4. Android修改充电图片,安卓充电提示音修改教程
  5. Python爬虫:通过爬取CSDN博客信息,学习lxml库与XPath语法
  6. 前端微信小程序常见面试题
  7. Glide系列-Webp如何被解析使用
  8. 链霉亲和素包被的荧光微球/蓝色微球/磁珠
  9. 外汇趋势的定义,什么是趋势,未来的趋势是什么
  10. android 取消 光标,EditText 设置点击外部取消光标