sklearn StandardScaler,不允许直接变换,我们需要 fit_transform

pni*_*gam 2 machine-learning python-3.x scikit-learn data-science

fit_transform 和 transform 有什么区别?为什么转换不直接起作用?

from sklearn.preprocessing import StandardScaler

 X_scaler = StandardScaler()
 X_train = X_scaler.fit_transform(X_train)
 X_test = X_scaler.transform(X_test)
Run Code Online (Sandbox Code Playgroud)

如果直接转换它会给出以下错误

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

Viv*_*mar 7

StandardScaler根据文档

通过去除均值和缩放到单位方差来标准化特征

因此,它需要以某种方式首先了解数据的均值和方差。因此fit()fit_transform()需要这样StandardScaler才能遍历所有数据以找到均值和方差。这些可以通过属性访问:

mean_:训练集中每个特征(列)的平均值。

var_:训练集中每个特征的方差。

请注意,这些将针对数据中的每一列单独计算。

在 中transform(),它只会使用这些meanvariance值来缩放数据。

现在您可能会说为什么它不在transform(). 这样做是为了以与缩放训练数据相同的方式缩放测试数据(从fit_transform())。如果您在每次调用 时计算数据的均值和方差transform(),那么所有传递的数据将具有不同的比例,这不是您想要的。

这适用于所有 scikit 转换器。

1) fit()- 只会遍历数据并保存所有需要的数据属性

2) transform()- 使用保存的属性fit()来更改数据

3) fit_transform()- 效用函数来fit()和然后transform()相同的数据。

通常你会调用fit_transform()训练数据,并且只调用transform()测试数据。