1.来源
fit和transform没有任何关系,仅仅是数据处理的两个不同环节,之所以出来fit_transform这个函数名,仅仅是为了写代码方便,会高效一点。
sklearn里的封装好的各种算法使用前都要fit,fit相对于整个代码而言,为后续API服务。fit之后,然后调用各种API方法,transform只是其中一个API方法,所以当你调用transform之外的方法,也必须要先fit。
fit原义指的是安装、使适合的意思,其实有点train的含义,但是和train不同的是,它并不是一个训练的过程,而是一个适配的过程,过程都是确定的,最后得到一个可用于转换的有价值的信息。
2.区别和联系
1、fit(): fit的作用就是求得训练集的均值、方差、最大值、最小值等这些训练集X固有的属性这套指标不仅用在训练集上,也用在测试集上,保证train、test的处理方式相同。
2、transform(): transform的作用是在fit的基础上,进行标准化,降维,归一化等操作
3、fit_transform(): 是fit和transform的结合,既包括了训练又包含了转换
3.为什么训练集fit_transform(),测试集只使用tranform()
必须先用fit_transform(trainData),之后再transform(testData)
如果直接transform(testData),程序会报错
如果fit_transfrom(trainData)后,使用fit_transform(testData)而不transform(testData),虽然也能归一化,但是两个结果不是在同一个“标准”下的,具有明显差异。(一定要避免这种情况)
因为先fit_transfrom像是定下了某种算法或者标准,如果在测试集上再进行fit(),由于两次的数据不一样,导致得到不同的指标,会使预测发生偏差,因为模型是针对之前的数据fit()出来的标准来训练的,而现在的数据是新的标准,会导致预测的不准确。
fit_transform()干了两件事:fit找到数据转换规则,并将数据标准化。transform:是将数据进行转换,比如数据的归一化和标准化,训练集和测试集必须要在一个规则下进行比较才有效。