当我们有两个具有不同元素的数组时,我们分别使用“拟合”和变换,我们根据其内部函数拟合“数组 1”,例如 MinMaxScaler (内部功能是求均值和标准差)。例如,如果我们根据其均值拟合“数组 1”并变换数组 2,则数组 1 的均值将应用于我们变换的数组 2。简而言之,我们将一个数组转换为另一个数组的基本内部函数。
代码演示:
import numpy as np
from sklearn.impute import SimpleImputer
imp = SimpleImputer(missing_values=np.nan, strategy='mean')
temperature = [32., np.nan, 28., np.nan, 32., np.nan, np.nan, 34., 40.]
windspeed = [ 6., 9., np.nan, 7., np.nan, np.nan, np.nan, 8., 12.]
n_arr_1 = np.array(temperature).reshape(3,3)
print('temperature:\n',n_arr_1)
n_arr_2 = np.array(windspeed).reshape(3,3)
print('windspeed:\n',n_arr_2)
输出:
temperature:
[[32. nan 28.]
[nan 32. nan]
[nan 34. 40.]]
windspeed:
[[ 6. 9. nan]
[ 7. nan nan]
[nan 8. 12.]]
fit 和 transform 分别将数组 2 转换为拟合(基于平均值)数组 1:
imp.fit(n_arr_1)
imp.transform(n_arr_2)
输出
检查下面的输出,根据前面的两个输出观察输出,你会看到差异。基本上,在数组 1 上,它取每一列的平均值,并根据丢失值的列拟合数组 2。
array([[ 6., 9., 34.],
[ 7., 33., 34.],
[32., 8., 12.]])
当我们想要基于另一个数组转换一个数组时,我们会这样做。但是当我们有一个数组并且我们想根据它自己的平均值对其进行转换时。在这种情况下,我们一起使用 fit_transform。
见下文;
imp.fit_transform(n_arr_2)
输出
array([[ 6. , 9. , 12. ],
[ 7. , 8.5, 12. ],
[ 6.5, 8. , 12. ]])
(上)我们做的交替:
imp.fit(n_arr_2)
imp.transform(n_arr_2)
输出
array([[ 6. , 9. , 12. ],
[ 7. , 8.5, 12. ],
[ 6.5, 8. , 12. ]])
为什么我们分别对同一个数组进行拟合和变换,需要两行代码,为什么不使用简单的 fit_transform ,它可以在一行代码中拟合和变换同一个数组。这就是 fit 和 transform 和 fit_transform 之间的区别。