中心化、标准化、归一化
图.左边是原始数据的分布情况、中间是经过中心化的分布情况、右边是经过标准化后的情况。图片来自知乎
说明:本文纯属胡说,没有加入严谨的数学推导,如有问题还请查看专业的书籍和博客文章
1. 中心化
Zero-centered或者Mean-subtraction
- 说明
中心化,就是把数据整体移动到以0为中心点的位置
把数据当做整体,将数据的中心点移动到以0的位置
^ ^
| |
| * * |
| * |
| * * * | *
-------+-------> => -------*-------
| * | *
| |
| |
- 具体计算
将数据减去这个数据集的平均值。
- 示例
例如有一系列的数值
1,3,5,7,9
计算平均值为(1 + 3 + 5 + 7 + 9 )/ 5 = 5
1-5 = -4
3-5 = 2
5-5 = 0
7-5 = 2
9-5 = 4
数据变为
-4,2,0,2,4
2. 标准化
Standardization
- 说明
把整体的数据的中心移动到0,数据再除以一个数。
- 具体计算
在数据中心化之后,数据再除以数据集的标准差(即数据集中的各项数据减去数据集的均值再除以数据集的标准差)
x' = (x - mean) ) / σ
再拿上面的数值举例
原始数据为
1,3,5,7,9
经过计算得到数据的标准差约为σ = 2.8
(1 - 5)/2.8 = -1.42
(3 - 5)/2.8 = -0.71
(5 - 5)/2.8 = 0
(7 - 5)/2.8 = 0.71
(9 - 5)/2.8 = 1.42
标准化之后的结果为
-1.42,-0.71,0,0.71,1.42
3. 归一化
Normalization
- 说明
把数据的最小值移动到0,在除以数据集的最大值。
- 具体计算
官方版
首先找到这个数据集的最大值max
以及最小值min
,然后将max
-min
,得到两个的差值R
,也就是叫做极差
,然后对这个数据集的每一个数减去min
,然后除以R
。
x' = (x - X_min) / (X_max - X_min)
民间版
这里你要是不记得中心化的话,先看一下中心化。然后开始,首先我们把数据仍然当做整体,然后把最小的点移动到0这个位置,然后回过头看计算公式是不是变了。由于min
变成了0
,那么计算的公式就是x / max'
,这里的max'
是经过移动之后的数值。
把数据当做整体,然后把最小的点移动到0这个位置
^ ^
| |
| * * |
| * * *
| * * | *
-------+-------> => -------*---*---
| |
| |
| |
- 示例
还是拿上面的例子举例
首先用官方版的方式计算一下
原始数据
1,3,5,7,9
最大值9
,最小值1
,极差9-1 = 8
接下来计算归一化后的数值
(1 - 1) / 8 = 0
(3 - 1) / 8 = 0.25
(5 - 1) / 8 = 0.5
(7 - 1) / 8 = 0.75
(9 - 1) / 8 = 1
然后用民间版的方式计算一下
原始数据
1,3,5,7,9
按照整体把最小值移动到0,得到
0,2,4,6,8
然后除以最大值
0 / 8 = 0
2 / 8 = 0.25
4 / 8 = 0.5
6 / 8 = 0.75
8 / 8 = 1
可以看到,其实这个归一化还是那种计算小的占最大的比例。那么问题来了,那为什么不这样算呢?就是说不移动整体,直接把每一个数占据最大数的比例求出来不就行了吗?
也就是这样:
1 / 9 = 0.11
3 / 9 = 0.33
5 / 9 = 0.55
7 / 9 = 0.77
9 / 9 = 1
额,说实话,这里我觉得没什么不妥当,同样也是将数据收缩在0~1
的范围内,但是我换了个数据好像就...
再拿一个数据
5,6,7,8,9
按照上面的计算,这里暂时简称为“简单除法法”
5 / 9 = 0.55
6 / 9 = 0.66
7 / 9 = 0.77
8 / 9 = 0.88
9 / 9 = 1
而使用归一化进行计算是这样的:
(5 - 5) / 4 = 0
(6 - 5) / 4 = 0.25
(7 - 5) / 4 = 0.5
(8 - 5) / 4 = 0.75
(9 - 5) / 4 = 1
可以看到使用“简单除法法”进行计算得到的位于0~1
范围内的数值没有经过归一化后的数据“拉得开”,好像腻乎在一块一样;同样是相对于某一数值的比例,使用归一化就不仅能将数据在收缩在0~1
范围内,而且还让数据在这个范围内展开。这里不是太好想象为什么是这样?这样,我们打开photoshop
,你没有看错,打开它
然后文件
->新建
->确定
->新建一个图层
,好,新建了一个,然后我们画一个方块,矩形工具
->按住shift拖动
->得到一个方块,然后按住alt
对着方块拖动鼠标,直到拖出三个,然后按照下图所示的方式排列。
之后按住ctrl
加选图层,把这三个方块的对应的图层都选中,右键
->合并形状
。然后把三个方块拖到画布的右上角
按ctrl + t
,可一看到在中心有一个点,这个点是变形时候的参考点,我们把点移动到最下面这个方块的左下角。然后把鼠标移动到缩放框的右上角按住shift+alt
进行拖动,感受一下拖动的感觉;然后这个时候把大小还原,将那个中心点移动到这个画布的左下角,然后再次把鼠标移动到缩放框的右上角按住shift+alt
进行拖动,感受一下拖动的感觉 。
中心化、归一化、标准化的作用怎么理解呢?
中心化上面的过程我们看到了,相当于把数据位移
了一下。在说这个之前,我们来玩一下找不同
,百度搜一下找不同
,我随便找了一张,我还记得这是朵拉,哈哈,你能快速找到不同吗?
这里有没有骚一点的操作呢?还记得上面的家伙吧你应该还没有关吧,进入photoshop
。然后,现在你手上有ps
,你怎么快速找不同呢?
我用photoshop
把连在一起的两张图裁剪开,分别放到两个图层中。得到下面的图。
然后将两张图片叠在一起,就像这样,然后来回调整最上面一个图层的不透明度或者关闭打开最上面图层的眼睛,可以看到明显变化的位置就是不同啦!你可以试一下啊!
归一化、标准化可以说都是线性的,在知乎 - 微调
的回答中,他通过公式的转变最后认为归一化、标准化很相似,都是x + b / c
这样一种形式,具体的可以看参考中的知乎链接。对应到这篇文章中就可以这样做,你可以把那三个方块的中心点放到中心然后拖动缩放框进行缩放就是标准化啦。在说归一化、标准化的作用之前,首先来看一句话
一滴水里观沧海,一粒沙里看世界
看这句话我就想起了我们和宇宙的“体型”的极大悬殊,宇宙浩瀚无垠,极其庞大;沙粒,微乎其微,极其渺小。另外除了上面这句话之外,还有“一花一世界,一叶一菩提”也比较常听到,这种“以小见大”的境界其实有一种理论模型的说法,我记得在一些初高中的化学或者物理课本上都画有原子图,中心一个原子核,然后又三个电子围绕着中心旋转,我相信很多人脑子里只要有过太阳系和这幅原子图的映像后会将它们联系起来。
原子
的半径为10^(-10) m
,太阳系的半径为6*10^(12)m
,它们的“体型”的差别用“天壤之别”似乎也不够,但是这种内部的“运转”形式又是如此的相似,难道说我们这个世界存在着一种特殊的规律?其实之前就有人提出过一个观念,叫做分形宇宙(Fractal Universe)
。
分形宇宙论,是物理宇宙学中的一个小众理论,算是一种非主流学说。这一理论认为,宇宙中的物质分布和宇宙结构本身在各个尺度上具有分形结构。在17世纪,著名的哲学家、数学家莱布尼茨就提出了单子论思想, 认为一种宇宙由无数个单子构成,每一个单子里面有一个完整的宇宙。 这个思想就有分形宇宙论的萌芽。
随着科学的发展,人们发现,宇宙在不同的尺度上,确实有着惊人的重复性结构。比如,把原子放大到10的17次方倍,它表现出来的性质就和一颗白矮星差不多。如果放大到10的30次方倍,它的各种力学和结构常数就非常接近于我们观测的银河系。更有甚者,把我们生活的环境或者世界比喻为一个“细胞”,而这个细胞在不断变大,细思极恐...
这个是混沌动力学里面研究的一个饶有兴趣的课题,它给我们展现了复杂的结构如何在不同层面上一再重复。所谓的分形宇宙也只是一家之言罢了。
读到这里,你的脑海中是不是已经浮现出了一个“小宇宙”、“大原子”呢?你的脑子是不是进行了一次归一化或者说标准化的过程呢?
更新
最近回过头来看看之前写的,没有特别说明其中归一化与标准化的中的差别。另外也发现标准化与归一化的形式还不单单只是一种。
英文名 | 中文 | 公式 |
---|---|---|
Rescaling | 缩放 | |
Mean normalisation | 平均值归一化 | |
Standardization | 标准化 | |
Scaling to unit length | 缩放到单位长度 |
说明:公式截取自机器学习中的特征缩放(feature scaling)浅谈
可以看到最前面两种(Rescaling 和 Mean normalisation)与前面说到的归一化是相似的,我觉这里这两个可以归为一类。
它们的分母是是一样的,都是max(X) - min(X)
,也就是说它们以自己内部的最大的差距最为分母,但是分子不一样,分别是x - min(X)
和 x - mean(X)
,这是个什么意思呢?
这里的x - mean(X)
就是之前说到的中心化!
中心化
x - min(X) x - mean(X) -----> 求距离
\ /
\ / 除以 ------> 进行缩放
\ /
max(X) - min(X) ------> 得到缩放尺度
因为分母相同,这里先暂时不管分母。
假如有六个点,在每条路上都一条标杆,这里我们来计算一下每一个距离标杆的长度
以x - min(X)
计算距离
| A - A
|------| B - A
|-------------| C - A
|---------------------| D - A
|----------------------------| E - A
|-----------------------------------| F - A
=====================================
A B C D E F
^
|
作为标杆的地方
以x - mean(X)
计算距离
|-----------------| A - mean
|----------| B - mean
|---| C - mean
C - mean |---|
E - mean |----------|
F - mean |-----------------|
v
=====================================
A B C D E F
|
mean
^
|
作为标杆的地方
通过图来看,x - min(X)
中的min(X)
,x - mean(X)
中的mean(X)
是两幅图中各自的标杆,如果移动这条标杆的位置就可以互相转换。所以这两个是相似的。但是我们可以看到,第一种得到的数值均为正数,但是第二种是有正负值的,分布于均值两侧。
那么第三种呢?这个对应到上面我们说到的标准化的东西。但是与上面归一化有什么差别呢?
我们拿第二种(Mean normalisation)与第三种(Standardization )进行对比会比较好理解,这两个的分子都是相同的,但是分母不同,前者是max(X) - min(X)
(也就是极差),后者是std(X)
(也就是标准差),我们看看这两者的计算方式的特点
公式 | 涉及到的数值 | 受奇异值的影响 |
---|---|---|
max(X) - min(X) |
最大值与最小值 | 大 |
std(X) |
所有数值 | 小 |
如果说数据存在特别大的或者特别小的数据的时候,归一化可能会导致数据黏糊在一起的情况(因为归一化的分母始终是数据中距离最大的点的距离),但是标准化(不仅仅会考虑单个极其特别的点,其他的点都会考虑,得到)出现这种情况会好一些(特别是数据量较大的情况下可能会抹除奇异值的影响)。
另外,归一化求得的数值最后会在[-1, 1]
之间,而标准化不一定,有可能会大于1
或者小于-1
。
参考
- R语言的scale函数
- 数据的归一化(Normalization)、标准化(Standardization)
- 归一化 (Normalization)、标准化 (Standardization)和中心化/零均值化 (Zero-centered)
- 大数据的中心化、标准化处理的重要性及处理方法
- 特征工程中的「归一化」有什么作用?
- 有趣的小众宇宙物理学:分形宇宙论
- 《上帝掷骰子吗?》
中间如果有错误,望能告知。
如需转载,请注明来源//www.greatytc.com/p/e41fc6aa5268。
版权声明:本文采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。