fit_transform是fit和transform的组合,
fit(x,y)传两个参数的是有监督学习的算法,算法训练的时候用,fit(x)传一个参数的是无监督学习的算法,比如降维、特征提取、标准化。这篇文章主要讲第二种(传一个参数的)。
transform(x),对数据x通过居中和缩放执行标准化使每个特征(每一列)均值为0,方差为1。
下面通过几段代码理解一下
第一段代码:
from sklearn import preprocessing
# 训练数据
X_train = np.array([[1., -1., 2.],
[2., 0., 0.],
[0., 1., -1.]])
# 测试数据
X_test = [[-1., 1., 0.]]
ss = preprocessing.StandardScaler()
scaler = ss.fit(X_train) #通过fit,获得了训练数据的均值,方差等等参数
>>> scaler
StandardScaler(copy=True, with_mean=True, with_std=True)
>>> scaler.mean_
array([ 1. ..., 0. ..., 0.33...])
>>> scaler.scale_
array([ 0.81..., 0.81..., 1.24...])
>>> scaler.transform(X_train) #用训练数据的fit参数来对训练数据进行transform
array([[ 0. ..., -1.22..., 1.33...],
[ 1.22..., 0. ..., -0.26...],
[-1.22..., 1.22..., -1.06...]])
#用训练数据的fit参数来对测试数据进行transform
>>> scaler.transform(X_test) 或 ss.fit_transform(X_test,scaler)
array([[-2.44..., 1.22..., -0.26...]])
#同时进行fit和transform操作,这种方法是错的
>>> scaler.fit_transform(X_test)
array([[0. 0. 0.]])
第二段代码
from sklearn import preprocessing
# 训练数据
X_train = np.array([[1., -1., 2.],
[2., 0., 0.],
[0., 1., -1.]])
# 测试数据
X_test = [[-1., 1., 0.]]
ss = preprocessing.StandardScaler()
>>> ss.fit_transform(X_train) #同时进行fit和transform操作
array([[ 0. ..., -1.22..., 1.33...],
[ 1.22..., 0. ..., -0.26...],
[-1.22..., 1.22..., -1.06...]])
>>> ss.transform(X_test) #用训练数据的fit参数来对测试数据进行transform
array([[-2.44..., 1.22..., -0.26...]])
>>> ss.fit_transform(X_test) #同时进行fit和transform操作,这种方法是错的
array([[0. 0. 0.]])
注意:test数据在transform的时候必须要用fit到的train数据的均值,方差等,因为模型是在train数据上训练出来的。