fit_transform、transform、fit之间的关系
- fit和transform没有任何关系,仅仅是数据处理的两个不同环节,fit_transform这个函数名,是将fit与transform两个操作结合起来,这样写代码会高效一点。
- sklearn里的封装好的各种算法使用前都要fit,fit相对于整个代码而言,为后续API服务。fit之后,然后调用各种API方法,transform只是其中一个API方法,所以当你调用transform之外的方法,也必须要先fit。
-
fit():简单来说,就是求得训练集X的均值,方差,最大值,最小值,这些训练集X固有的属性。
-
transform(): 在fit的基础上,进行标准化,降维,归一化等操作(看具体用的是哪个工具,如PCA,StandardScaler等)。
-
fit_transform():fit_transform是fit和transform的组合,既包括了训练又包含了转换。fit_transform(trainData)对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),然后对该trainData进行转换transform,从而实现数据的标准化、归一化等等。
问题:为什么只在训练集上面使用fit(),而不在测试集或者测试集上fit()。
你的算法不应该知道关于任何测试集的信息,所以测试集的方差与均值都应该来自训练集的先验数据,即我们在训练集上fit得到平均数,方差等信息,使用在测试集以及验证集上。当然,这也需要你的数据集划分足够合理,使你在训练集上训练出来的模型有足够的泛化能力(当然模型的设计更关键)。再引申一句,验证集的归一化也要和训练集一样,在调整参数的时候,我们面对的是验证集的结果。在验证集上得到最佳的参数设置,最终在测试集上进行实验。
以上部分引用:
https://www.zhihu.com/question/60490799/answer/388715802
https://blog.csdn.net/weixin_38278334/article/details/82971752