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()?
在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)