sklearn数据预处理中fit(),transform()与fit_transform()的区别

1 概述

注意这是数据预处理中的方法:

  • 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处理方式相同。所以,一般都是这么用:


 
 
  1. from sklearn.preprocessing import StandardScaler
  2. sc = StandardScaler()
  3. sc.fit_tranform(X_train)
  4. sc.tranform(X_test)

Note:

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

 


2 举例

以PCA预处理,举个栗子:


 
 
  1. import pandas as pd
  2. import numpy as np
  3. from sklearn.decomposition import PCA
  4. #==========================================================================================
  5. X1=pd.DataFrame(np.arange( 9).reshape(( 3, 3)),index=[ 'a', 'b', 'c'],
  6. columns=[ 'one', 'two', 'three'])
  7. pca=PCA(n_components= 1)
  8. newData1=pca.fit_transform(X1)
  9. pca.fit(X1)
  10. newData12=pca.transform(X1)
  11. """
  12. newData1和newData2结果一致
  13. """
  14. #==========================================================================================
  15. a=[[ 1, 2, 3],[ 5, 6, 7],[ 4, 5, 8]]
  16. X2=pd.DataFrame(np.array(a),index=[ 'a', 'b', 'c'],
  17. columns=[ 'one', 'two', 'three'])
  18. pca_new=PCA(n_components= 1)
  19. pca_new.transform(X2)
  20. """
  21. 没有fit,直接transform报错:
  22. NotFittedError: This PCA instance is not fitted yet. Call 'fit' with appropriate arguments before using this method.
  23. """

3 参考文献

  1. what is the difference between 'transform' and 'fit_transform' in sklearn
  2. sklearn.decomposition.PCA方法中fit, fit_transform, transform应该怎么用
  3. scikit-learn数据预处理fit_transform()与transform()的区别(转) - CSDN博客

 

posted @ 2020-07-08 17:18  野哥李  阅读(28)  评论(0编辑  收藏  举报  来源