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

这下似乎看起来有意义多了,我们训练集似乎训练了一个比较说的通的模型(刚刚的假设结论~)。

 

posted @ 2023-03-16 12:08  ImreW  阅读(31)  评论(0编辑  收藏  举报