首页 > 解决方案 > 何时使用 fit_transform 和 transform?

问题描述

对于像LabelEncoderSimpleImputer来自 scikit-learn 之类的东西,我们为什么要使用fit_transformDataFrameX_train以及为什么要使用transformDataFrame X_valid

例如

for col in object_cols:
    label_X_train[col] = label_encoder.fit_transform(X_train[col])
    label_X_valid[col] = label_encoder.transform(X_valid[col])

两者在工作方式上有何区别?

标签: pythonpython-3.xscikit-learn

解决方案


如果您想使用 imputer 使用中值填充训练数据中的一些缺失值,则首先需要计算该中值是多少,这就是调用fit().

现在您有了中间值,但您没有更改数据集,为此您需要更改(或转换)数据集。这就是你打电话时发生的事情transform()。通常,您想要计算一个中值并使用该中值来替换 NaN 或其他一些非值,fit_transform()为方便起见,将上述两个步骤一次性完成。

当您调用fit()imputer 对象时,会保存适合的值,当您调用transform测试数据时,此值用于插补。

回到你的例子。您用于sklearn.preprocessing.LabelEncoder将字符串转换为整数。您调用fit()然后transform(或fit_transform())在您的训练数据上将字符串更改为整数。现在您有了测试数据,您需要使用相同的方法将测试数据中的字符串更改为整数,因此您使用已经拟合的LabelEncoder对象,并且只需要transform()在对象已经拟合(或参数化)时调用训练数据。


推荐阅读