fit_transform和transform的区别
部分转载
写在前⾯
fit和transform没有任何关系,仅仅是数据处理的两个不同环节,之所以出来fit_transform这个函数名,仅仅是为了写代码⽅便,会⾼效⼀点。
sklearn⾥的封装好的各种算法使⽤前都要fit,fit相对于整个代码⽽⾔,为后续API服务。fit之后,然后调⽤各种API⽅法,transform只是其中⼀个API⽅法,所以当你调⽤transform之外的⽅法,也必须要先fit。
fit原义指的是安装、使适合的意思,其实有点train的含义,但是和train不同的是,它并不是⼀个训练的过程,⽽是⼀个适配的过程,过程都是确定的,最后得到⼀个可⽤于转换的有价值的信息。
fit,transform,fit_transform常⽤情况分为两⼤类
#(fit(x,y)传两个参数的是有监督学习的算法,fit(x)传⼀个参数的是⽆监督学习的算法,⽐如降维、特征提取、标准化)
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处理⽅式相同
为什么X_train标准化是⽤fit_transform(),⽽X_test标准化是⽤transform()呢?
fit_transform()⼲了两件事:fit到数据转换规则,并将数据标准化
transform:是将数据进⾏转换,⽐如数据的归⼀化和标准化,将测试数据按照训练数据同样的模型进⾏转换,得到特征向量。可以直接把转换规则拿来⽤,所以并不需要fit_transform(),否则,两次标准化后的数据格式(或者说数据参数)就不⼀样了