特征处理-归一化(等比例缩放数字) 作者:马育民 • 2019-09-15 09:15 • 阅读:10167 # 概述 归一化,Normalization 1. 把数据进行变换,映射到 **[0,1]** 之间 主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加 **便捷快速**。 2. 把 **有量纲** 表达式变成 **无量纲** 表达式,便于** 不同单位** 或 **量级** 的指标能够进行 **比较** 和 **加权**。 归一化是一种 **简化计算** 的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。 ### 扩展 把数据进行变换,映射 **[m,n]** 之间 # 案例 假设女生找男朋友的标准有 **4个特征:颜值、身高、年薪、房子面积**,而且认为 这4个特征 **同等重要** 目标值 是女生对该男生的 评价:**不喜欢、一般、喜欢** |颜值(分) |身高(cm) |年薪(元) |房子面积(平方米) |评价| | ------------ | ------------ | ------------ | ------------ | ------------ | |7 |180 |300000 |70 | 喜欢| |3 |172 |200000 |110 | 不喜欢| |5 |168 |250000 |190 | 一般| |8 |185 |60000 |0 | 一般| |4 |178 |36000 |80 |喜欢 | |6 |175 |48000 |120 | 喜欢| **注意:** 当 **特征同等重要** 时,才 有可能 需要做归一化处理 在做 分类预测 时,有的分类算法(KNN)要计算特征之间的距离, 计算方式如下: ``` (列0最大值 - 列0最小值)^2+(列1最大值 - 列1最小值)^2+...+(列n最大值-列n最小值)^2 ``` 计算如下: ``` (7-3)^2+(185-168)^2+(300000-36000)^2+(190-0)^2 ``` ### 问题 2. **颜值 数值较小,差异过小**,所以 **颜值 影响 过小**,可以忽略。 2. **身高 数值过小,差异过小**,所以 **身高 影响 过小**,可以忽略。 1. **年薪 数值过大,差异过大** ,所以 **年薪 影响 过大** 4. **房子面积 数值较小,差异较小**,所以 **房子面积 影响 较小** 在计算时,就 **违背** 了 **特征同等重要** ### 归一化 解决 分别对“颜值”、“身高”、“年薪”、“房子面积” **4个特征** 做归一化,转换成 **无量纲的数值** **注意:** **不是** **整体** 做归一化,是分别对 **4个特征** 做归一化 如下: |颜值 |身高 |年薪 |房子面积 | | ------------ | ------------ | ------------ | ------------ | | **0.8** |0.70588235|**1.** | 0.36842105| | **0.** | 0.23529412|**0.62121212**|0.57894737| | 0.4 |0. | 0.81060606|1. | | 1. | 1. | 0.09090909|0. | | 0.2 |0.58823529|0. | 0.42105263| | 0.6 |0.41176471|0.04545455|0.63157895| 以前2行的“颜值”、“年薪”为例 - 转换前,“年薪”量纲更大,显得更重要 - 归一化后,特征转成[0,1]的无量纲数值,同等重要 # 为什么要归一化? ### 让数据同等重要 - 由于数据的 **单位不一样**,有些数据的范围较大,**对结果的影响较大**;有些数据的范围较小,**对结果的影响较小**,不符合数据同等重要 - 由于有些数据的 **值范围较大**,**对结果的影响较大**;有些数据的 **值范围较小**,**对结果的影响较小**,不符合数据同等重要 所以,为了让 **特征同等重要** ,就需要做 归一化,让每个特征的数据,**映射在[0,1]之间**,这样对结果的 **影响一样大** ### 与激活函数有关 以 sigmoid激活函数为例 ,参见 https://www.malaoshi.top/show_1EF3rzCm0GFL.html 当输入数据过大、过小时,得到的结果差别不大,不能很好的做激活处理 # 好处 1. 加快了 **梯度下降** 求最优解的速度 加速梯度下降,减少梯度下降时的 **摆动** 2. 有可能提高 **精度** 每个特征同等重要 # 缺点 当有 **异常数据** 时,计算后对 结果 影响较大,鲁棒性较差,如下图: [![](https://www.malaoshi.top/upload/0/0/1EF44URVEhDm.png)](https://www.malaoshi.top/upload/0/0/1EF44URVEhDm.png) # 应用场景 在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用 比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围 不包括Z-score方法 # 归一化的类型 本文主要讲解 **线性归一化** ### 1. 线性归一化 比较适用在 **数值 比较 集中** 的情况。 缺陷:如果 **max**(最大值)和 **min**(最小值)**不稳定**,很容易使得归一化 **结果不稳定**,使得后续使用 **效果也不稳定**。 ### 2. 非线性归一化 比较适用在 **数据 分化 比较大** 的情况,有些数值 **很大**,有些 **很小**。 通过一些数学函数,将原始值进行映射。该方法包括 **log、指数,正切**等。 # Min-Max归一化(线性归一化) [![](https://www.malaoshi.top/upload/0/0/1EF44T6FuJFY.png)](https://www.malaoshi.top/upload/0/0/1EF44T6FuJFY.png) **解释:** - 作用于每一个特征 - **max(x)** 为 该特征 的 **最大值** - **min(x)** 为 该特征 的 **最小值** - 结果在 **[0,1]** 之间 ### numpy实现归一化: ``` import numpy as np # 将上面的案例进行归一化 l=[ [7,180,300000,70], [3,172,200000,110], [5,168,250000,190], [8,185,60000,0], [4,178,36000,80], [6,175,48000,120] ] arr=np.array(l) def max_min_normal(x): mn=np.min(x,axis=0) mx=np.max(x,axis=0) return (x-mn)/(mx-mn) ``` ### sklearn实现归一化 ``` from sklearn import preprocessing import numpy as np l=[ [7,180,300000,70], [3,172,200000,110], [5,168,250000,190], [8,185,60000,0], [4,178,36000,80], [6,175,48000,120] ] arr=np.array(l) ret = preprocessing.MinMaxScaler().fit_transform(arr) print("归一化:\n",ret) ``` # 缩放数字 ### 将图片的值缩放到0-255之间 有时归一化后,可以自定义结果的区间,还需要再次计算,公式如下: [![](https://www.malaoshi.top/upload/0/0/1EF44T8MrMfb.png)](https://www.malaoshi.top/upload/0/0/1EF44T8MrMfb.png) **解释:** - ```x'```是 线性归一化 公式的计算结果 - mx、mi是指定区间的最大值、最小值 - 结果```x''```在[mi,mx]之间 在卷积网络中,一般将图片进行归一化,处理后,需要将值缩放回0-255之间,才能显示成图片。 根据上面 【扩展】 得出: ``` def max_min_normal(x): mn=np.min(x) mx=np.max(x) return (x-mn)/(mx-mn)*255 ``` ### 将值缩放到指定区间 使用下面函数: ``` import numpy as np def max_min_normal(x,min,max): mn=np.min(x) mx=np.max(x) res = (x-mn)/(mx-mn) return res * (max-min)+min ``` 形参解释: - `x` 表示要计算的数据 - `max` 表示指定范围的最大值 - `min` 表示指定范围的最小值 测试: ``` x = [98,97,92,85,81,73,60] res = max_min_normal(x,85,95) print("res:",res) ``` 执行结果: ``` [95. 94.73684211 93.42105263 91.57894737 90.52631579 88.42105263 85. ] ``` # Z-score标准化(0均值归一化) 这种方式是标准化,转换后没有把数据映射到[0,1]之间,但有的地方也将其归为归一化 参见: https://www.malaoshi.top/show_1EF4YYUNDlOv.html 参考: https://www.jianshu.com/p/95a8f035c86c https://blog.csdn.net/qq_36523839/article/details/82919412 https://blog.csdn.net/Datapad/article/details/80174775 https://blog.csdn.net/qq_24831889/article/details/83344638 https://blog.csdn.net/zs15321583801/article/details/79663654 原文出处:http://malaoshi.top/show_1EF44SFFqg9G.html