归一化 (Normalization)、标准化 (Standardization)和中心/零均值化 (Zero-centered)

2023-05-16

目录

一、概念

1、归一化(Normalization):

 2、标准化(Standardization):

3、中心化/零均值化(zero-centered):

二、联系和差异:

三、标准化和归一化的多种方式

三、为什么要归一化/标准化?

3.1、数据的量纲不同;数量级差别很大

3.2、避免数值问题:太大的数会引发数值问题。

3.3、平衡各特征的贡献

3.4、一些模型求解的需要:加快了梯度下降求最优解的速度

四、什么时候用归一化?什么时候用标准化?

4.1 归一化、标准化使用场景

4.2、所有情况都应当Standardization或Normalization么

五、神经网络为什么要进行归一化

5.1 数值问题

5.2 求解需要


一、概念

1、归一化(Normalization):

(1)将一列数据变化到某个固定区间(范围)中,通常,这个区间是[0, 1] 或者(-1,1)之间的小数。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。

(2)把有量纲表达式变成无量纲表达式,便于不同单位或量级的指标能够进行比较和加权。归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。

从公式看: 归一化输出范围在0-1之间

        ​​​​​​​该方法实现对原始数据的等比例缩放。通过利用变量取值的最大值和最小值(或者最大值)将原始数据转换为界于某一特定范围的数据,从而消除量纲和数量级影响,改变变量在分析中的权重来解决不同度量的问题。由于极值化方法在对变量无量纲化过程中仅仅与该变量的最大值和最小值这两个极端值有关,而与其他取值无关,这使得该方法在改变各变量权重时过分依赖两个极端取值。

 2、标准化(Standardization):

原始数据减均值之后,再除以标准差。将数据变换为均值为0,标准差为1的分布,切记:并非一定是正态的。

虽然该方法在无量纲化过程中利用了所有的数据信息,但是该方法在无量纲化后不仅使得转换后的各变量均值相同,且标准差也相同,即无量纲化的同时还消除了各变量在变异程度上的差异,从而转换后的各变量在聚类分析中的重要性程度是同等看待的。

从公式看:标准化输出范围是负无穷到正无穷

# python实现
X -= np.mean(X, axis = 0)  # zero-center
X /= np.std(X, axis = 0)   # normalize

在机器学习中,我们可能要处理不同种类的资料,例如,音讯和图片上的像素值,这些资料可能是高维度的,资料标准化后会使每个特征中的数值平均变为0(将每个特征的值都减掉原始资料中该特征的平均)、标准差变为1,这个方法被广泛的使用在许多机器学习算法中(例如:支持向量机、逻辑回归和类神经网络)。

​​​​​​​

 上图中左图是原图可视化,中图是减均值后的可视化,右图是除以标准差后的可视化。

3、中心化/零均值化(zero-centered):

中心化,也叫零均值处理,就是将每个原始数据减去这些数据的均值。因此 中心化后的数据平均值为0,对标准差无要求。

二、联系和差异:

归一化和标准化的区别:

  • 归一化是将样本的特征值转换到同一量纲下把数据映射到[0,1]或者[-1, 1]区间内,缩放比例仅由变量的最大、最小极值决定。
  • 标准化和整体样本分布相关,与归一化相比,标准化中每个样本点都能对标准化产生影响(通过均值和标准差造成影响)。
  • 显而易见,归一化(Normalization)会严格的限定变换后数据的范围,比如按之前最大最小值处理的Normalization,它的范围严格在[0,1]之间;
    而标准化(Standardization)就没有严格的区间,变换后的数据没有范围,只是其均值是0 0,标准差为1,变换后数据的范围是负无穷到正无穷

归一化和标准化的相同点:

  • 它们的相同点在于都能取消由于量纲不同引起的误差;本质上都是一种线性变换,因为二者都是不会改变原始数据排列顺序的线性变换,都是对向量X按照比例压缩再进行平移。

标准化和中心化的区别:

  • 标准化是原始分数减去平均数然后除以标准差,中心化是原始分数减去平均数。 所以一般流程为先中心化再标准化。

都能实现无量纲:我的理解就是通过某种方法能去掉实际过程中的单位,从而简化计算。

总结:

对比点归一化标准化
概念将数值规约到(0,1)或(-1,1)区间将对应数据的分布规约在均值为0,标准差为1的分布上
侧重点数值的归一,丢失数据的分布信息,对数据之间的距离没有得到较好的保留,但保留了权重数据分布的归一,较好的保留了数据之间的分布,也即保留了样本之间的距离,但丢失了权值
形式在这里插入图片描述在这里插入图片描述
缺点

1.丢失样本间的距离信息;

2.鲁棒性较差,当有新的样本加入时最大值与最小值很容易受异常点影响

1.丢失样本间的权重信息;
适合场景

1.小数据/固定数据的使用;

2.不涉及距离度量、协方差计算、数据不符合正态分布的时候;

3.进行多指标综合评价的时候;

1.在分类、聚类算法中,需要使用距离来度量相似性;

2.有较好的鲁棒性,有产出取值范围的离散数据或对最大值最小值未知的情况下;

缩放方式先使用最小值平移,后使用最值差缩放先使用均值u平移,之后用标准差进行缩放
目的便于消除量纲,将各个指标的数据纳入到综合评价中;便于后续的梯度下降和激活函数对数据的处理。因为标准化后,数据以0为中心左右分布,而函数sigmoid,Tanh,Softmax等也都以0为中心左右分布;

三、标准化和归一化的多种方式

广义的说,标准化和归一化同为对数据的线性变化,所以我们没必要规定死,归一化就是必须到[0,1]之间。

1、归一化的最通用模式Normalization,也称线性归一化:

2、Mean normalization:

 3、标准化(Standardization),Z-score规范化,也叫标准差标准化 / 零均值标准化

三、为什么要归一化/标准化?

如前文所说,归一化/标准化实质是一种线性变换,线性变换有很多良好的性质,这些性质决定了对数据改变后不会造成“失效”,反而能提高数据的表现,这些性质是归一化/标准化的前提。比如有一个很重要的性质:线性变换不会改变原始数据的数值排序。

3.1、数据的量纲不同;数量级差别很大

经过标准化处理后,原始数据转化为无量纲化指标测评值,各指标值处于同一数量级别,可进行综合测评分析。

如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。

3.2、避免数值问题:太大的数会引发数值问题。

3.3、平衡各特征的贡献

一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。

如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。

3.4、一些模型求解的需要:加快了梯度下降求最优解的速度

1)在使用梯度下降的方法求解最优化问题时, 归一化/标准化后可以加快梯度下降的求解速度,即提升模型的收敛速度。如左图所示,未归一化/标准化时形成的等高线偏椭圆,迭代时很有可能走“之”字型路线(垂直长轴),从而导致迭代很多次才能收敛。而如右图对两个特征进行了归一化,对应的等高线就会变圆,在梯度下降进行求解时能较快的收敛。

未归一化
归一化后

示例分析假设:

theta1 为房间数量,范围可以是 0~10

theta2 为房间面积,范围可以是 0~1000

数据没有归一化的表达式,可以为:

 而数据归一化之后,损失函数的表达式可以表示为:

从归一化的公式中可以看到,变量的前面系数几乎一样,则图像的等高线为类似圆形形状,最优解的寻优过程像上图所示。

同时,从上可以看出,数据归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。 

四、什么时候用归一化?什么时候用标准化?

4.1 归一化、标准化使用场景

  1. 如果对输出结果范围有要求,用归一化。
  2. 如果数据较为稳定,不存在极端的最大最小值,用归一化。
  3. 如果数据存在异常值和较多噪音,用标准化,可以间接通过中心化避免异常值和极端值的影响。

某知乎博主分享了他个人经验:一般来说,我个人建议优先使用标准。对于输出有要求时再尝试别的方法,如归一化或者更加复杂的方法。很多方法都可以将输出范围调整到[0, 1],如果我们对于数据的分布有假设的话,更加有效的方法是使用相对应的概率密度函数来转换。

4.2、所有情况都应当Standardization或Normalization么

当原始数据不同维度特征的尺度(量纲)不一致时,需要标准化步骤对数据进行标准化或归一化处理,反之则不需要进行数据标准化。也不是所有的模型都需要做归一的,比如模型算法里面有没关于对距离的衡量,没有关于对变量间标准差的衡量。比如决策树,他采用算法里面没有涉及到任何和距离等有关的,所以在做决策树模型时,通常是不需要将变量做标准化的;另外,概率模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率。

五、神经网络为什么要进行归一化

5.1 数值问题

归一化/标准化可以避免一些不必要的数值问题。输入变量的数量级有可能会引起数值问题。因为tansig(tanh)的非线性区间大约在[-1.7,1.7]。意味着要使神经元有效,tansig(w1x1 + w2x2 +b) 里的 w1x1 +w2x2 +b 数量级应该在1.7所在的数量级左右。这时如果输入较大,就意味着权值必须较小,一个较大,一个较小,两者相乘,就引起数值问题了。
假如你的输入是421,你也许认为,这并不是一个太大的数,但因为有效权值大概会在1/421左右,结果是1左右,例如0.00243,那么,在matlab里输入 421*0.00243 == 0.421*2.43,会发现不相等,这就是一个数值问题。

5.2 求解需要

a、初始化:在初始化时我们希望每个神经元初始化成有效的状态,tansig函数在[-1.7, 1.7]范围内有较好的非线性,所以我们希望函数的输入和神经元的初始化都能在合理的范围内使得每个神经元在初始时是有效的。(如果权值初始化在[-1,1]且输入没有归一化且过大,会使得神经元饱和)

b、梯度:以输入-隐层-输出这样的三层BP为例,我们知道对于输入-隐层权值的梯度有2ew(1-a^2)*x的形式(e是误差,w是隐层到输出层的权重,a是隐层神经元的值,x是输入),若果输出层的数量级很大,会引起e的数量级很大,同理,w为了将隐层(数量级为1)映身到输出层,w也会很大,再加上x也很大的话,从梯度公式可以看出,三者相乘,梯度就非常大了。这时会给梯度的更新带来数值问题。

c、学习率:由b知,梯度非常大,学习率就必须非常小,因此,学习率(学习率初始值)的选择需要参考输入的范围,不如直接将数据归一化,这样学习率就不必再根据数据范围作调整。 隐层到输出层的权值梯度可以写成 2ea,而输入层到隐层的权值梯度为 2ew(1-a^2)x ,受 x 和 w 的影响,各个梯度的数量级不相同,因此,它们需要的学习率数量级也就不相同。对w1适合的学习率,可能相对于w2来说会太小,若果使用适合w1的学习率,会导致在w2方向上步进非常慢,会消耗非常多的时间,而使用适合w2的学习率,对w1来说又太大,搜索不到适合w1的解。如果使用固定学习率,而数据没归一化,则后果可想而知。

d、搜索轨迹:上面已解释过

另一篇文章:

深入探讨:为什么要做特征归一化/标准化?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

归一化 (Normalization)、标准化 (Standardization)和中心/零均值化 (Zero-centered) 的相关文章

  • VNC连接Ubuntu 16.04桌面灰色的问题解决

    1 安装gnome apt get install no install recommends ubuntu desktop gnome panel gnome settings daemon metacity nautilus gnome
  • Linux用diff比较两个文件的差异

    功能 xff1a 比较两个文件的差异 xff0c 并把不同地方的信息显示出来 语法 xff1a diff options FILES FILES的格式 xff1a FILE1 FILE2 xff1a 源是一个文件 xff0c 目标也是文件
  • 基于Qt的GPS导航系统软件源代码

    博主按 xff1a 这是我当初为了学习C 43 43 而给自己定的一个项目 xff0c 基本上实现了 通过这个项目可以说基本上掌握了C 43 43 和Qt的编程 现在将源码贡献出来给初学Qt的同志一些参考 当然其中肯定有不少地方是有问题的
  • (二十)ATP应用测试平台——websocket实现微服务版在线客服聊天室实战案例

    前言 在前面的博客内容中我们介绍了如何使用websocket实现一个网页版的在线客服聊天室 xff0c 众所周知 xff0c 由于websocket是一个长连接 xff0c 要和服务端保持会话连接 xff0c 所以其本身并不适用于微服务环境
  • 启动vncserver服务,并设置开机自启

    systemctl start vncserver 64 1 service amp amp systemctl enable vncserver 64 1 service 无论你是做网站工作 xff0c 还是运行一个家庭远程服务器 xff
  • "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"?

    参考资料 xff1a https blog lmlphp com archives 437 PHP 7 3 classic error continue targeting switch 找到代码那一行 xff0c 修改 xff0c 保存即
  • SLAM学习笔记2:Kalman Filter(卡尔曼滤波) 与Least Square(最小二乘法) 的比较

    对于一个问题的解决 xff0c 最根本在于怎样对它进行数学建模 对SLAM问题的建模 xff0c 基本上是基于filter和graph两大类 xff0c 今天整理了一下 xff0c 对比两种模型的区别及共性 主要参考这篇讲解 xff1a h
  • RTC实时时钟特征与原理

    RTC定义 RTC是个独立的定时器 RTC模块拥有一个连续计数的计数器 xff0c 在相应的软件配置下 xff0c 可以提供时钟日历的功能 修改计数器的值可以重新设置当前时间和日期 RTC模块和时钟配置系统 RCC BDCR寄存器 是在后备
  • 树莓派配置,小白教程,无键盘显示屏鼠标

    树莓派配置 xff0c 小白教程 xff0c 无键盘显示屏鼠标 实验步骤 xff1a xff08 1 xff09 在树莓派官网下载树莓派的系统 树莓派官网下载地址 xff1a http www raspberrypi org downloa
  • CAN总线综述-转发一篇关于CAN总线的详细介绍文章

    CAN总线 一 原文出处 xff1a http www cnblogs com jacklu p 4729638 html 嵌入式的工程师一般都知道CAN总线广泛应用到汽车中 xff0c 其实船舰电子设备通信也广泛使用CAN xff0c 随
  • Python 安装 MaxMind GeoLite City

    1 先安装 geoip c library geoip c library gt 61 1 4 6 installed on your machine gt 61 1 4 6 installed on your machine wget h
  • 华为MA5626-8密码恢复

    设备型号 xff1a 华为MA5626 8 display version VERSION MA5626V800R308C00 PATCH SPC500 SPH505 HP5105 PRODUCT MA5626 准备工作 xff1a 超级终
  • SNMP 获取交换机端口相关信息

    我们想用snmpwalk查看网络设备的端口 xff0c MIB库中相关定义的信息如下 xff1a root 64 redcock lifeng snmpwalk v 2c c lifeng 192 168 100 100 注意后面的点 xf
  • phpMyAdmim和Yii 连接Mysql报错。

    故障 xff1a 之前phpMyAdmim和Yii连接Mysql都好着的 xff0c 某天 xff0c 同时出现如下报错 xff1a 1 linux下phpMyAdmin 出现 缺少 mysqli 扩展 xff0c 请检查 PHP 配置 2
  • linux shell 执行多个命令的方法

    xff08 1 xff09 在每个命令之间用 xff1b xff08 分号 xff09 隔开 xff08 2 xff09 在每个命令之间用 amp amp 隔开 amp amp 表示 xff1a 若前一个命令执行成功 xff0c 才会执行下
  • ARP 属于哪层协议

    教材上把ARP 协议划到网络层 xff0c 是因为 ARP 协议属于 TCP IP 协议簇 在TCP IP 模型中 xff0c 它所有定义的协议是在网际层上的 再看按照OSI 的标准 xff0c 数据在传递时每层会加上自己的信息 当网络层的
  • 什么叫一层交换机,二层交换机,三层交换机?

    转自 xff1a http blog csdn net happypolo article details 5934429 简单地说 xff1a 一层交换机 只支持物理层协议 电话程控交换机可以算一个 二层交换机 支持物理层和数据链路层协议
  • Linux Shell 脚本中字符串的连接方法

    Linux Shell 脚本中字符串的连接方法 如果想要在变量后面添加一个字符 xff0c 可以用一下方法 xff1a value1 61 home value2 61 value1 34 61 34 echo value2 把要添加的字符
  • linux 如何将路径加入环境变量

    PATH 61 PATH 后面加路径 PATH是环境变量 要大写那几个目录是你放置linux命令的目录 输入命令后系统会去PATH中寻找是否存在该命令 查看当前环境变量 echo PATH也可以用set命令看一下设置 export PATH
  • expect spawn、linux expect 用法

    使用expect实现自动登录的脚本 xff0c 网上有很多 xff0c 可是都没有一个明白的说明 xff0c 初学者一般都是照抄 收藏 可是为什么要这么写却不知其然 本文用一个最短的例子说明脚本的原理 脚本代码如下 xff1a usr bi

随机推荐

  • python 调用 shell python shell 间变量传递

    python gt shell xff1a 1 环境变量 python view plain copy print import os var 61 123 或var 61 123 os environ var 61 str var env
  • vSphere,ESXi和vCenter 的区别

    最近在看 VMware 一直没有搞清楚这几个产品之间的区别和联系 正好在网上搜索到一个好文 xff0c 翻译下来 本文翻译自 xff1a http www mustbegeek com difference between vsphere
  • equals和hashCode详解

    在学习的过程中 xff0c 特别是学习集合的时候 xff0c equals和hashCode一直是经常出现的方法 xff0c 而且在面试题中 xff0c 也经常出现equals和 61 61 的区别等问题 xff0c 现在我们就从底层详细的
  • NuttX的应用记录 4 (小记录)

    好久没看过NuttX了 xff0c 做个移植试一试 板子是STM32F407ZE xff0c 有两块屏幕 xff0c 蜂鸣器 xff0c FLASH xff0c E2PROM xff0c LED 先找个类似的 xff0c 复制一个副本 st
  • PetaLinux学习笔记 3

    过年回家没带开发板 终于可以搞一搞了 更新petaLinux到2019 2 重建项目 xff0c flash调整一下 启动过程中提示 xff1a m25p80 spi0 0 found w25q256 expected n25q512a m
  • 高云GW1N-9的SerDes笔记

    GW1NR 9的片子 xff1a 看起来还是很强的 xff0c 但是在工程中使用后会这样提示 xff1a 看起来有点虚标啊 那就按1G来先 xff0c 做个后仿 直接用OSER来输出数据 看起来还可以 输出可以 在做一个输入 xff0c 根
  • NuttX的学习笔记 1

    学习这个系统 xff0c 开始是在PIX的飞控上了解到的 xff0c 感觉这个系统很有兴趣 xff0c 当然 xff0c 这是我第一次接触RTOS xff0c 有不正确的地方 xff0c 请予以指正 注意 过程是我边操作边写的 xff0c
  • NuttX的学习笔记 2

    README文档目录的第二部分 Configuring NuttX Instantiating Canned ConfigurationsRefreshing ConfigurationsNuttX Configuration ToolFi
  • LSM303DLHC

    xff08 PS xff1a 最近在帮人做一个电子罗盘 xff0c 刚好STM32F429i DISCO上有个MEMS xff0c 但是我自己没有看到底是个什么传感器 xff0c 搞搞搞了半天 xff0c 读出来三个数据 xff0c 但我移
  • Embedded Wizard 研究笔记 1

    今天突发奇想看看这个Embedded Wizard xff0c 看介绍视频还是很不错的 而且前几天做的罗盘很丑 xff0c 让我深刻意识到了UI的必要性 xff0c 那么这个Embedded Wizard就是为此而生 刚好我手上还有一块ST
  • STM32 & Clion

    注 xff1a 这个方法已经不适用于最新版本的的Clion了 xff08 最近通过Android认识了Jetbrain公司 xff0c 从此彻底迷上了这个公司的产品 xff0c Unity上用Rider xff0c Java上用IDEA x
  • NuttX的移植笔记 2

    好了 xff0c 继续 5 B L475E IOT01A clocking h 这个文件基本和configs stm32l476vg disco include stm32l476vg disco clocking h差不多 不如说就是一模
  • TortoiseGit的介绍和使用

    Git是什么 xff0c 相信大家都很清楚 Git不就是分布式版本控制系统嘛 xff1f 那你知道TortoiseGit是什么吗 xff1f 下面我们就介绍一下TortoiseGit它是什么 xff1f 如何使用 xff1f Tortois
  • CentOS7查看和关闭防火墙

    CentOS 7 0默认使用的是firewall作为防火墙 查看防火墙状态 firewall cmd state 停止firewall systemctl stop firewalld service 禁止firewall开机启动 syst
  • maven问题:org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException

    原因 xff1a 因为maven中集成的tomcat插件的版本与创建项目的jdk版本有冲突 xff0c 比如运行时使用的tomcat6而jdk是1 8 xff0c 而tomcat6是不支持该jdk的 解决 xff1a 1 在该工程中的pom
  • nginx反向代理后,重定向失败问题

    nginx在做反向代理到后端服务器 xff0c 如果后端服务器有重定向 xff0c 会出现返回服务器的ip地址 xff0c 解决办法 xff1a server listen 80 server name www boke com locat
  • 虚拟机扩容——LVM分区

    虚拟机扩容 LVM分区 前提说明实验环境一 准备工作二 查看磁盘扩容后状态三 对指定磁盘进行初始化操作四 创建物理卷1 刷新分区并创建物理卷2 查看物理卷信息 五 卷组 逻辑卷的操作 xff08 加载到已有路径 xff09 1 查看卷组名称
  • ssh 免密登录

    Linux生成密钥和公钥 先查看有没有路径 ssh 如果有证明以前生成过了 xff0c 如果没有就需要重新生成 1 输入如下命令 xff1a ssh keygen t rsa 或者添加邮箱 ssh keygen t rsa C 34 你的邮
  • 深度学习模型训练调参的tricks总结

    目录 一 调参tricks总结分析 1 数据与标签角度 1 1 数据归一化 1 2 数据增强 1 3 标签平滑 xff08 Label Smoothing xff09 2 权重初始化 xff08 Weight Initialization
  • 归一化 (Normalization)、标准化 (Standardization)和中心/零均值化 (Zero-centered)

    目录 一 概念 1 归一化 xff08 Normalization xff09 xff1a 2 标准化 xff08 Standardization xff09 xff1a 3 中心化 零均值化 xff08 zero centered xff