![d7025e7e-7c11-eb11-8da9-e4434bdf6706.png](http://p05.5ceimg.com/content/d7025e7e-7c11-eb11-8da9-e4434bdf6706.png)
概念
归一化:缩放仅仅跟最大、最小值的差别有关;输出范围在a-b之间
标准化:缩放和每个点都有关系,通过均值μ和标准差σ体现出来;输出范围是负无穷到正无穷
相同点:归一化和标准化的本质都是一种线性变换,线性变换不改变原始数据的数值排序
优点
- 提升模型的收敛速度
- 提升模型的精度
- 深度学习中数据归一化可以防止模型梯度爆炸
使用场景
- 如果对输出结果范围有要求,用归一化
- 如果数据较为稳定,不存在极端的最大最小值,用归一化
- 如果数据存在异常值和较多噪音,用标准化,可以间接通过中心化避免异常值和极端值的影响
python实现
![d8025e7e-7c11-eb11-8da9-e4434bdf6706.png](http://p05.5ceimg.com/content/d8025e7e-7c11-eb11-8da9-e4434bdf6706.png)
![da025e7e-7c11-eb11-8da9-e4434bdf6706.png](http://p05.5ceimg.com/content/da025e7e-7c11-eb11-8da9-e4434bdf6706.png)
sklearn轮子:
归一化:import sklearn.preprocessing.MinMaxScaler
标准化:import sklearn.preprocessing.StandardScaler
拓展
问:如何归一化到任意[a,b]区间内呢?
答:首先我们来看下如何归一化到[0,1]的。
- 区间长度为1-0=1,我们把它平分到(max-min)中,那么每一份为1/(max-min)
- 很显然,对应的x占(x-min)份,那么归一化后的x_norm = 1/(max-min) * (x-min)
同理,区间[a,b]可以写成a+[0,b-a],那么
- 区间长度为b-a-0=(b-a),我们把它平分到(max-min)中,那么每一份为(b-a)/(max-min)
- 同理,对应的x占(x-min)分,那么归一化后的x_norm = a + [(b-a)/(max-min) * (x-min)]
注意
用于测试数据标准化的均值和标准差都是在训练数据上计算得到的,在工作流程中,你不能使用在测试数据集上计算得到的任何结果,即使是像数据标准化这么简单的事情。归一化同理