fit,transform,fit_transform
(一)通俗解释
1.fit()
Method calculates the parameters μ and σ and saves them as internal objects.
解释:计算数据的参数,(均值),(标准差),并存储在对象中。
2.transform()
Method using these calculated parameters apply the transformation to a particular dataset.
解释:将这些参数应用到数据集,进行标准化(尺度化)
3.fit_transform()
joins the fit() and transform() method for transformation of dataset.
解释:将前两种方法合并,fit + transform,然后对数据集使用
(二)归一化(Normalization)
对数值类型的特征做归一化可以将所有的特征都统一到一个大致相同的数值区间内,使其具有可比性。
(三)为什么只对训练集做fit_transform,对测试集只做transform?
下面我们用一个例子进行说明:
假设我的训练集有三个棒子的样本,它们分别是:
- 样本1:10cm ---> class 2
- 样本2:20cm ---> class 2
- 样本3:30cm ---> class 1
通过给出的数据,我们可以算出以下参数:
- mean : 20
- std : 8.2
我们对数据进行标准化,得到以下:
- 样本1:-1.21 ---> class 2
- 样本2:0 ---> class 2
- 样本3:1.21 ---> class 1
现在我们对数据做一个假设结论,当小于0.6的就归到class 2,反之就归类到 class 1。这个假设看起来比较有意义,符合数据分布。
接下来,我们看看测试集的样本:
- 样本4:5cm ---> class ?
- 样本5:6cm ---> class ?
- 样本6:7cm ---> class ?
这是“未标准化的”数据,如果我们不对它们进行标准化,那按我们刚刚的假设,那它们都属于class 1了?肯定不可能是吧,好的,那现在假如我们“重新”对它们计算参数,注意了,这里我们是针对测试集计算参数!
我们将测试集标准化后,得到了一下:
- 样本4:-1.21
- 样本5:0
- 样本6:1.21
巧了,和刚刚训练集得到的一模一样。然后我们用我们刚刚训练集训练得到的结论,对它们分类:
- 样本4:-1.21 ---> class 2
- 样本5:0 ---> class 2
- 样本6:1.21 ---> class 1
奇怪的事情发生了,感觉不太对是吧?
那我们用训练集得到的参数对它们进行标准化呢:
- 样本4:-1.837
- 样本5:-1.715
- 样本6:-1.592
按我们开始的假设结论进行分类:
- 样本4:-1.837 ---> class 2
- 样本5:-1.715 ---> class 2
- 样本6:-1.592 ---> class 2
这下似乎看起来有意义多了,我们训练集似乎训练了一个比较说的通的模型(刚刚的假设结论~)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了