sklearn 数据预处理中 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(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','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.
"""
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值