Python之sklearn数据预处理中fit(),transform()与fit_transform()的区别
目录
- sklearn数据预处理中fit(),transform()与fit_transform()的区别
- 概述
- 举例
- sklearn中归一化的坑
- 原因
- 总结
sklearn数据预处理中fit(),transform()与fit_transform()的区别
概述
注意这是数据预处理中的方法:
Fit(): Method calculates the parameters μ and σ and saves them as internal objects.
解释:简单来说,就是求得训练集X的均值啊,方差啊,最大值啊,最小值啊这些训练集X固有的属性js。可以理解为一个训练过程
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()二者的功能都是对数据进行某种统一处理(比如标开发者_Go入门准化~N(0,1),将数据缩放(映射)到某个固定区间,归一化,正则化等)fit_transform(trainData)
对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等(根据具体js转换的目的),然后对该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(trainData),之后再transform(testData)
- 如果直接transform(testData),程序会报错
- 如果fit_transfrom(trainData)后,使用fit_transform(testData)而不transform(testData),虽然也能归一化,但是两个结果不是在同一个“标准”下的,具有明显差异。(一定要避免这种情况)
举例
以PCA预处理,举个栗子:
import pandas as pd import numpy as np from sklearn.decomposition import PCA #========================================================================================== X1=pd.DataFrame(np.arange(9).reshape((3,3)),index=['a',http://www.devze.com'b','c'], columns=['one','two','three']) pca=PCA(n_components=1) newData1=pca.fit_transform(X1) pca.fit(X1) newData12=pca.transform(X1) """ newData1和newData2结果一致 """ #========================================================================================== a=[[1,2,3],[5,6,7],[4,5,8]] X2=pd.DataFrame(np.array(a),index=['a','b','c'], columns=['one','two','three']) pca_new=PCA(n_components=1) pca_new.transform(X2) """ 没有fit,直接transform报错: NotFittedError: This PCA instance is not fitted yet. Call 'fit' with appropriate arguments before using this method. """
sklearn中归一化的坑
This MinMaxScaler instance is not fitted yet. Call 'fit'android; with appropriate arguments before using this method.
原因
归一化时,fit() 和transform() 两个方法要分开.
sc_x = MinMaxScaler(feature_range=(0, 1)).fit(X) X=sc_x.transform(X)
sc_y = MinMaxScaler(feature_range=(0, 1)).fit(Y) Y = sc_y.transform(Y)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
精彩评论