sklearn 数据预处理函数fit,transform和fit_transform的区别

sklearn fit,transform和fit_transform

Posted by 粘世强 on May 31, 2018

sklearn 数据预处理函数fit,transform和fit_transform的区别

from sklearn import preprocessing   
import numpy as np    
X = np.array([[1., -1., 2.],
              [2., 0., 0.],
              [0., 1., -1.]])  
#创建一个数据规约的对象,然后拟合数据
scaler = preprocessing.StandardScaler().fit(X)
#output: StandardScaler(copy=True, with_mean=True, with_std=True)  
#计算出原数据中每个特征(列)的均值
scaler.mean_
#output: array([ 1.,  0. ,  0.33333333])
#计算出原数据中每个特征(列)的标准差
scaler.std_
#output: array([ 0.81649658,  0.81649658,  1.24721913]) 

按照计算出来的均值和标准差对数据进行标准化(使特征数据方差为1,均值为0),即通过公式

(x - x.mean)/x.std得到标准化后的值

scaler.transform(X)
 #output: array([[ 0., -1.22474487,  1.33630621],
 #             [ 1.22474487, 0. , -0.26726124], 
 #             [-1.22474487,1.22474487, -1.06904497]])  
#对新的数据进行标准化,此时进行标准化的均值和标准差依旧是fit得到的数据的均值和标准差
scaler.transform([[-1., 1., 0.]])
#output: array([[-2.44948974,  1.22474487, -0.26726124]]) 
#解释:(-1 - 1 )/ 0.81649658 = -2.44948974
#	: ( 1 - 0 ) /  0.81649658 =  1.22474487
#   :  (0 - 0.33333333) / 1.24721913 = -0.26726124

所以从上边的代码中可以看出:fit的作用在于到数据中去学习,得到数据的均值和标准差。transform的作用在于按照学习到的均值和标准差对新的数据进行标准化。

fit_transform又有什么用呢?

从名字上就可以理解,这个命令是先对数据进行fit,得到数据的相关参数,然后再进行transform,这个命令只是将fittransform两个命令结合在一起了。

也就是说,当我们在训练集上调用fit_transform,对训练数据进行先拟合后标准化的处理时,此时我们已经得到数据的均值和方差,这一操作接下来不用重复执行,因此我们在测试集上只需要调用transform,对测试数据进行标准化的处理。数据处理过程如下图所示: