在学习Sklearn的时候,有时会看到fit_tranform(),有时也会遇到fit()或transform(),需要整理一下它们的关系和用法,理清思路。
fit:
其实有点train的感觉,但是和train不同,它并不是一个训练的过程,而是一个适配的过程,适配的方法都是确定的,最后从训练集中得到一些参数,如归一化时用到的均值,标准偏差等。
transform:
根据所调用的函数的规则将数据进行转换,一般用于特征抽取和转换,如数据的归一化和标准化,或者将测试数据按照训练数据同样的模型进行转换,得到特征向量。transform函数必须在fit函数之后调用否则会报错。
fit_transform:
可以看做是fit和transform的结合,相当于先调用fit再调用transform,fit和transform没有任何关系,仅仅是数据处理的两个不同环节。训练样本先做fit,得到均值、标准偏差,然后将这些参数用于transform(归一化训练数据),使得到的训练数据是归一化的,而测试数据只需要在原先得到的均值、标准偏差上来做归一化就行,所以如果训练阶段使用fit_transform,则在测试阶段只需要对测试样本进行transform就行。Sklearn库源码中有句话“This is equivalent to fit followed by transform, but more efficiently implemented.”,所以更推荐这种方法。
总结:
Sklearn里的封装好的各种算法都要先fit,然后调用各种API方法,transform只是其中一个API方法,fit是为后续的API函数服务的。