06-数据归一化(Feature Scaling)

数据归一化(Feature Scaling)

  之前我们使用 kNN 算法来完成分类这个任务的时候,其实少做了非常重要的一步就是数据归一化(Feature Scaling)

  首先,我们来看看,为什么我们需要做数据归一化?我依然举出肿瘤这个例子,假设我们有两个特征,一个是肿瘤大小(单位是cm),一个是发现天数(单位是天)。样本1中肿瘤大小为1cm,已经发现200天了,样本二中肿瘤大小为5cm,已经发现100天了。

在这里插入图片描述
  那么这两个样本之间的距离是怎样的呢?如果我们使用欧拉距离,就是 sqrt( (1-5)^2 + (200-100)^2 ) 。可以很容易的发现,这个距离被发现时间所主导了,我们发现的时间间隔为100天,而肿瘤的大小只相差了4cm,所以导致样本间的距离被发现时间所主导了。

  但是,如果我们把发现时间的单位用年来表示,如下图。此时,样本间的距离又被肿瘤的大小所主导了。
在这里插入图片描述
  所以我们发现,如果我们不进行一些数据的基本处理,我们这样直接计算出两个样本之间的距离很有可能是有偏差的,不能非常好的同时反映每一个特征的重要程度。正是因为如此,我们要对数据进行归一化处理。

  所谓的数据归一化处理,它的作用就是将我们所有的数据映射到同一尺度。通常这种映射方式,最简单就是把所有的数据映射到 0-1 之间,叫做最值归一化(normalization)。可以用下列表达式表示。
在这里插入图片描述

  这种方式其实是比较简单的一种做法,它适用于分布有明显边界的情况(比如考试成绩有明显的分数边界:0-100),但是最值归一化也有一个缺点,就是受 outlier 影响较大(比如说收入是没有明显边界的)。

  相应的一个改进方式是使用均值方差归一化(standardization),就是把所有数据归一到均值为0,方差为1的分布中。换句话说,使用这种方法的结果是我们的数据不保证在0-1之间,但是所有的数据它的均值都在0的位置,整体数据的方差为1。这种方式适用于数据分布没有明显边界。换句话说,我们的数据有可能存在极端数据值 outlier,使用这种方式相对比较好。如果我们的数据有明显边界的话,使用这种方式也是比较好的,所以在这里建议,除非像之前举的例子,学生的考试分数或者图像的像素(0-255)这种特征分布是有明确边界的这些情况,那么一般情况我们都是用均值方差归一化的方式。这种方式计算方法如下。(Xmean 为均值, S 方差)
在这里插入图片描述


具体实现

下面,我们具体实现这两种归一化的过程。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用这种均值方差归一化的方法,它的本质是将我们所有的数据的均值(中心值)放在0这个位置,而它分布的幅度(方差)分布在1这样的位置。即使我们的数据中有 outlier 这样的极端值存在,我们数据整体依然满足均值为0,方差为1,也就是说它不会形成一个有偏差的数据,这也是相比于最值归一化来说它的优点。


具体代码见 07 数据归一化.ipynb

猜你喜欢

转载自blog.csdn.net/qq_41033011/article/details/108973224
今日推荐