Sklearn语法(1)——fit,transform和fit_transform的区别

引言

  • fit和transform没有任何关系,仅仅是数据处理的两个不同环节,之所以出来fit_transform这个函数名,仅仅是为了写代码方便,会高效一点。
  • sklearn里的封装好的各种算法使用前都要fit,fit相对于整个代码而言,为后续API服务。fit之后,然后调用各种API方法,transform只是其中一个API方法,所以当你调用transform之外的方法,也必须要先fit。

注意

  • 运行结果一模一样不代表这两个函数可以互相替换,绝对不可以!transform函数是一定可以替换为fit_transform函数的,fit_transform函数不能替换为transform函数!

fit,transform,fit_transform在数据预处理中的应用

  • fit(): Method calculates the parameters μ and σ and saves them as internal objects.
    解释:简单来说,就是求得训练集X的均值,方差,最大值,最小值,这些训练集X固有的属性。
  • transform(): Method using these calculated parameters apply the transformation to a particular dataset.
    解释:在fit的基础上,进行标准化,降维,归一化等操作(看具体用的是哪个工具,如PCA, StandardScaler等)。
  • fit_transform(): joins the fit() and transform() method for transformation of dataset.
    解释:fit_transform是fit和transform的组合,既包括了训练又包含了转换。
    transform()和fit_transform()二者的功能都是对数据进行某种统一处理(比如标准化~N(0,1),将数据缩放(映射)到某个固定区间,归一化,正则化等)
    fit_transform(trainData)对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),然后对该trainData进行转换transform,从而实现数据的标准化、归一化等等。
    根据对之前部分trainData进行fit的整体指标,对剩余的数据(testData)使用同样的均值、方差、最大最小值等指标进行转换transform(testData),从而保证train、test处理方式相同。所以,一般都是这么用:
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit_tranform(X_train)
sc.tranform(X_test)

Note:

  • 必须先用fit_transform(x_train),之后再transform(testData)
  • 如果直接transform(x_test),程序会报错
  • 如果fit_transfrom(trainData)后,使用fit_transform(testData)而不transform(testData),虽然也能归一化,但是两个结果不是在同一个“标准”下的,具有明显差异。(一定要避免这种情况)
上一篇:libtcmalloc 简单使用


下一篇:简单二次封装的Golang图像处理库:图片裁剪