sklearn.impute SimpleImputer:为什么transform()首先需要fit_transform()?

时间:2019-05-08 08:10:40

标签: python scikit-learn

sklearn提供了transform()方法来应用一键编码器。

要使用transform()方法,在调用fit_transform()方法之前需要transform(),否则

np.array([[1, 1], [2, 1], [3, 2], [np.nan, 2]])
from sklearn.impute import SimpleImputer
my_imputer = SimpleImputer()
my_imputer.transform(df)

出现错误

  

NotFittedError:此SimpleImputer实例尚未安装。呼叫   使用此方法之前,请先“匹配”适当的参数。

fit_transform()之前呼叫transform()

my_imputer.fit_transform(df)
my_imputer.transform(df)

解决此错误。

问题是,transform()为什么需要fit_transform()

2 个答案:

答案 0 :(得分:0)

fit()期间,推动者了解数据的平均值,中位数等,然后将其应用于transform()期间的缺失值。

fit_transform()只是组合这两种方法的简写。所以本质上:

  • fit(X, y):-了解所提供数据的必需方面,并返回具有学习参数的新对象。它不会以任何方式更改提供的数据。

  • transform():-实际上将提供的数据转换为新格式。

fit_transform(df)不需要在转换之前被调用。只需要调用fit()。通常,您描述的序列是通过训练和测试数据拆分完成的。像这样:

# Combining the learning of parameters from training data and transforming into a single step.
X_train_new = my_imputer.fit_transform(X_train)

# We dont want to learn about test data, only change it according to previously learnt information
X_test_new = my_imputer.transform(X_test)

上面的代码段可以分为:

# It learns about the data and does nothing else
my_imputer.fit(X_train)

# Calling transform to apply the learnt information on supplied data
X_train_new = my_imputer.transform(X_train)
X_test_new = my_imputer.transform(X_test)

答案 1 :(得分:0)

实际上,transform_fit 包含拟合和转换两个步骤,或者您可以说填充缺失值。

对于你的问题,为什么我们需要先进行转换,因为它是一种训练数据的插补并推导出均值或中位数……以填补缺失值