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

7 python scikit-learn

sklearn 提供transform()了应用 one-hot 编码器的方法。

使用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)
Run Code Online (Sandbox Code Playgroud)

错误出现

NotFittedError: 这个 SimpleImputer 实例尚未安装。在使用此方法之前,使用适当的参数调用 'fit'。

fit_transform()之前打电话transform()

my_imputer.fit_transform(df)
my_imputer.transform(df)
Run Code Online (Sandbox Code Playgroud)

修复这个错误。

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

Viv*_*mar 9

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)
Run Code Online (Sandbox Code Playgroud)

上面的代码片段可以分解为:

# 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)
Run Code Online (Sandbox Code Playgroud)