开发者

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)

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜