• 【sklearn】fit()、transform()和fit_transform()的区别


    fit(): Method calculates the parameters μ \mu μ and σ \sigma σ 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(training_data)对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),然后对该training_data进行转换transform,从而实现数据的标准化、归一化等等。

    根据对之前部分training_data进行fit的整体指标,对剩余的数据(test_data)使用同样的均值、方差、最大最小值等指标进行转换transform(test_data),从而保证train、test处理方式相同。所以,一般都是这么用:

    实例讲解

    通过 fit 函数可以先对需要归一化的数据集进行最大、最小值的计算,至于说最终归一化的结果是多少,对不起,fit 函数到此为止了。

    所以,在 MinMaxScaler 的 fit 之后可以查看数据集中的最大、最小值:

    import numpy as np
    from sklearn.preprocessing import MinMaxScaler
    # 创建数组
    data_rn = np.random.randint(-10, 10, 10).reshape(5, 2)
    print(data_rn)
    # 进行标准归一化
    scaler_mmc = MinMaxScaler()
    scaler_mmc_fit = scaler_mmc.fit(data_rn)
    print(scaler_mmc_fit.data_min_)  # 最小值
    print(scaler_mmc_fit.data_max_)  # 最大值
    print(scaler_mmc_fit.data_range_) # 极差
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    我们看一下最终的结果:

    [[-10   1]
     [ -5   0]
     [  7   3]
     [ -8  -1]
     [  0  -8]]
    [-10.  -8.]
    [7. 3.]
    [17. 11.]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    同样的,使用 fit 函数也可以对需要标准化的数据集进行均值、标准差的计算。相应的函数方法如下:

    import numpy as np
    from sklearn.preprocessing import StandardScaler
    scaler_ss = StandardScaler()
    scaler_ss_fit = scaler_ss.fit(data_rn)
    print(scaler_ss_fit.mean_) # 均值
    print(scaler_ss_fit.var_) # 方差
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    [-3.2 -1. ]
    [37.36 14.  ]
    
    • 1
    • 2

    总结一下 fit 的用法:

    简单来说,就是求得数据集的均值、方差、最大值、最小值等固有的属性,经常和 transform 搭配使用。

    从算法模型的角度上讲,fit 过程可以理解为一个训练过程。

    其实 transform 才是真正做归一化和标准化的函数,fit 函数只是做了前面的准备工作。

    从算法模型的角度上讲,transform 过程可以理解为一个转换过程。

    用法也很简单,对前面 fit 过的数据集直接进行操作即可:

    # 归一化
    scaler_mmc_result = scaler_mmc.transform(data_rn)
    # 标准化
    scaler_ss_result = scaler_ss.transform(data_rn)
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    scaler_ss_result
    
    • 1

    在这里插入图片描述
    即 fit_transform 是 fit 和 transform 的组合,整个过程既包括了训练又包含了转换

    fit_transform 对数据先拟合 fit,找到数据的整体指标,如均值、方差、最大值最小值等,然后对数据集进行转换transform,从而实现数据的标准化、归一化操作。

    一定要注意:

    不能对训练集和测试集都使用 fit_transform,虽然这样对测试集也能正常转换(归一化或标准化),但是两个结果不是在同一个标准下的,具有明显差异。

    总结一下:

    首先,如果要想在 fit_transform 的过程中查看数据的分布,可以通过分解动作先 fittransformfit 后的结果就包含了数据的分布情况。

    如果不关心数据分布只关心最终的结果可以直接使用 fit_transform 一步到位。

    其次,在项目上对训练数据和测试数据需要使用同样的标准进行转换,切记不可分别进行 fit_transform

  • 相关阅读:
    linux:git
    什么是自动化测试,一文吃透自动化测试【实战总结/建议收藏】
    sql判断NULL值:IF()、IFNULL()、NULLIF()、ISNULL()函数的区别使用
    Qt5开发从入门到精通——第五篇三节( 文本编辑器 Easy Word 开发 V1.2详解 )
    9.2 链表静态添加和遍历
    ProtoBuf的使用
    C++人事管理系统
    【Redis】Docker部署Redis数据库
    Linux命令(107)之basename
    Window和MacOS对于conda以及pip换源方法
  • 原文地址:https://blog.csdn.net/wzk4869/article/details/126816545