专栏首页数据森麟做数据处理,你连 fit、transform、fit_transform 都分不清?

做数据处理,你连 fit、transform、fit_transform 都分不清?

fit、transform 是什么?

MinMaxScaler 的 fit 函数的官方定义:

Compute the minimum and maximum to be used for later scaling.

翻译一下:计算用于进行特征缩放的最大值、最小值

也就是说,通过 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_) # 极差

"""输出"""
[[ 4 -5]
 [-5  2]
 [-5 -4]
 [-2 -8]
 [-6  3]]
# 最小值
[-6. -8.]
# 最大值
[4. 3.]
# 极差
[10. 11.]

StandardScaler 的 fit 函数的官方定义:

Compute the mean and std to be used for later scaling.

翻译一下:计算用于进行特征缩放的均值、标准差

同样的,使用 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_) # 方差

"""输出"""
# 均值
[-2.8 -2.4]
# 方差
[13.36 17.84]

总结一下 fit 的用法:

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

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

再来说说 transform 函数。

同样的先来看看官方对于 transform 函数的定义:

MinMaxScaler:Scale features of X according to feature_range. StandardScaler:Perform standardization by centering and scaling

翻译一下:

MinMaxScaler:根据 feature_range 进行 X 的缩放 StandardScaler:通过居中和缩放执行标准化

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

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

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

# 归一化
scaler_mmc_result = scaler_mmc.transform(data_rn)
# 标准化
scaler_ss_result = scaler_ss.transform(data_rn)    

最终的结果和直接进行 fit_transform 的结果一致。即:

fit + transform = fit_transform

即 fit_transform 是 fit 和 transform 的组合,整个过程既包括了训练又包含了转换

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

项目中使用技巧

了解了 fit、transform 的用法之后,可以再来学习下在项目中使用的小技巧。

项目的数据集一般都会分为 训练集和测试集,训练集用来训练模型,测试集用来验证模型效果。

要想训练的模型在测试集上也能取得很好的得分,不但需要保证训练集数据和测试集数据分布相同,还必须保证对它们进行同样的数据预处理操作。比如:标准化和归一化。

所以一般对于数据集处理上,会直接对训练集进行 拟合+转换,然后直接对测试集 进行转换

注意了,是用训练集进行拟合,然后对训练集、测试集都用拟合好的”模型“进行转换,一定要明白这个逻辑!!

并不是真正的模型,所以带了引号

写成代码就是这样子:

from sklearn.preprocessing import StandardScaler

scaler_ss = StandardScaler()
# 训练接操作
new_train_x = scaler_ss.fit_transform(train_x)
# 测试集操作
new_test_x = scaler_ss.tranform(test_x)

一定要注意,一定要注意,一定要注意:

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

总结一下

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

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

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

文章分享自微信公众号:
数据森麟

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

原始发表时间:2021-01-04
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 机器学习测试笔记(16)——数据处理

    对于机器学习,选择一个好的算法是非常有用的,另外对测试集和训练集的数据进行处理也是非常重要的。通常情况下是为了消除量纲的影响。譬如一个百分制的变量与一个5分值的...

    小老鼠
  • 数据挖掘中常用的基本降维思路及方法总结

    根据一定的规则和经验,直接选取原有维度的一部分参与后续的计算和建模过程,用选择的维度代替所有维度。优势是既能满足后续数据处理和建模要求,又能保留维度原本的业务含...

    数据STUDIO
  • 关于sklearn独热编码二.字符串型类别变量

    from sklearn.preprocessing import LabelEncoder

    小飞侠xp
  • sklearn中的数据预处理和特征工程

      小伙伴们大家好~o( ̄▽ ̄)ブ,沉寂了这么久我又出来啦,这次先不翻译优质的文章了,这次我们回到Python中的机器学习,看一下Sklearn中的数据预处理和...

    py3study
  • 【机器学习】快速入门特征工程

    这个结果并不是想要看到的,所以加上参数,得到想要的结果,在这里把这个处理数据的技巧用专业的称呼"one-hot"编码。

    后端码匠
  • 如何使用sklearn进行数据挖掘

    1.1、数据挖掘的步骤 数据挖掘通常包括数据采集,数据分析,特征工程,训练模型,模型评估等步骤。使用sklearn工具可以方便地进行特征工程和模型训练工作,在《...

    用户1332428
  • 一个实例告诉你:Kaggle 数据竞赛都有哪些套路

    前面写了很多篇理论,大家愿意一篇一篇坚持看下来其实挺不容易的,虽然理论很重要,但脱离了实践还是空中楼阁啊,算法科学家也不可能不代码啊,所以呀,今天我们就插播一期...

    AI研习社
  • 数据处理中的标准化、归一化,究竟是什么?

    今天说一个比较重要的内容,无论是在算法建模还是在数据分析都比较常见:数据归一化和标准化。

    小一不二三
  • python︱sklearn一些小技巧的记录(pipeline...)

    sklearn里面包含内容太多,所以一些实用小技巧还是挺好用的。 1、LabelEncoder 简单来说 LabelEncoder 是对不连续的数字或者文本进行...

    悟乙己
  • 如何使用sklearn进行数据挖掘?

    1.1 数据挖掘的步骤 数据挖掘通常包括数据采集,数据分析,特征工程,训练模型,模型评估等步骤。使用sklearn工具可以方便地进行特征工程和模型训练工作,在...

    机器学习AI算法工程
  • NLP(4)——用词向量技术简单分析红楼梦人物关系用n-gramma生成词向量word2vect进行模型训练

    前言:出于种种原因,总是不自觉把爱好和工作相互结合起来,每每感叹于曹雪芹构思的巧妙,语言的精炼,情节的感人……于是蹦出想法,看机器能否读懂“宝黛”之间的爱情。

    DC童生
  • 手把手带你开启机器学习之路——房价预测(二)

    在前一篇文章手把手带你开启机器学习之路——房价预测(一)中我们以加州住房价格数据集为基础,学习了数据抽样,数据探索性分析和可视化,数据预处理(缺失值填充,增加新...

    超哥的杂货铺
  • 机器学习篇(二)

    归一化的公式:x1 = (x-mix)/(max-min) x2 = x1*(mx-mi) + mi

    不断折腾
  • 机器学习-从高频号码中预测出快递送餐与广告骚扰

    由头 1、笔者最近在做机器学习嘛,上次发了一篇文章,这周发现有大问题,此次算是对上篇的补充与说明。 2、算法基本完成,在进行收尾的工作,今天共享给大家思路,涉及...

    企鹅号小编
  • 使用Pipelines来整合多个数据预处理步骤

    Pipelines are (at least to me) something I don't think about using often, but ar...

    到不了的都叫做远方
  • 【转载】使用sklearn优雅地进行数据挖掘

      数据挖掘通常包括数据采集,数据分析,特征工程,训练模型,模型评估等步骤。使用sklearn工具可以方便地进行特征工程和模型训练工作,在《使用sklearn做...

    marsggbo
  • 漫谈特征缩放

    说起"炼丹"最耗时的几件事,首先就能想到的就是数据清洗,特征工程,还有调参.特征工程真的是老生常谈了,但是特征工程又是最重要的一环,这一步做不好怎么调参也没用....

    炼丹笔记
  • AI开发最大升级:Pandas与Scikit-Learn合并,新工作流程更简单强大!

    对于许多数据科学家来说,一个典型的工作流程是在Scikit-Learn进行机器学习之前,用Pandas进行探索性的数据分析。新版本的Scikit-Learn将会...

    新智元
  • sklearn做特征选择

    特征选择可以对样本集做特征选择/降维,既可以提高估计器的准确率,又可以提高估计器在超高维数据集上的性能。

    生信编程日常

扫码关注腾讯云开发者

领取腾讯云代金券