fit/transform/fit_tranfom

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数据上训练出来的。

猜你喜欢

转载自blog.csdn.net/xiaohuihui1994/article/details/84788050