14.归一化——关键的数据预处理方法

news2024/11/29 0:53:50

引言

在人工智能(AI)和机器学习中,归一化(Normalization)是一个重要的预处理步骤。它的主要目的是将数据转换到某个特定的范围。归一化可以帮助模型更高效地学习和提高预测的准确性。归一化在数据预处理方法中占据核心地位,是确保数据质量和模型性能的关键步骤。

通过阅读本篇博客,你可以:

1.知晓归一化的概念

2.掌握常见的归一化方法

一、归一化的概念

1.归一化(Normalization)的目的

要讲归一化,我们不可避免的要提到梯度下降。如果维度过多(超平面),我们很难将其以不同参数的关系表达出来。所以我们使用两个维度作为例子来阐述归一化前与归一化后的区别。如果拿多元线性回归距离,因为多元线性回归的损失函数MSE是凸函数,所以我们把损失函数看成一个碗,损失最小的地方就是碗底的地方(如上图所示)。

上图左是做了归一化的俯瞰图,上图右是没有做归一化的俯瞰图。

"为什么没有做归一化的俯瞰图会显示为椭圆形呢?"。为了回答这个问题,我们不妨设置一些变量用于证明。假设维度 x_{1} 中的每一条数据都远小于维度 x_{2} 中的每一条数据 ,即 x_{1} << x_{2} 。我们将表达式的截距项设为0。那么整个表达式即为 y = \theta_{1}x_{1} + \theta_{2}x_{2} 。因为我们不知道两个维度权重的大小,所以我们可以想象两部分对 y 的贡献是一样的,即 \theta_{1}x_{1} = \theta_{2}x_{2} ,又由于 x_{1} << x_{2} ,最终能得出 \theta_{1}' >> \theta_{2}' 。所以说上右图中 \theta_{1} 的轴要比 \theta_{2} 的轴长,且俯瞰图呈椭圆形。再次思考一下,我们在梯度下降的第一步中,所有的 \theta 都是服从标准正态分布分布的,也就是初始的 \theta_{1} 和 \theta_{2} 是差不多的。所以我们可以得出结论: \theta_{1} 从 初始值到目标位置 \theta_{1}' 的距离要远大于 \theta_{2} 从初始值到目标位置 \theta_{2}' ,也就是调整幅度 D_{1} >> D_{2}。 

从公式的角度去推导,从梯度计算公式 gradient_{j} = (h_{\theta}x - y) \cdot x_{j} 中我们可以知道,梯度与样本 x_{j} 呈正比,所以 x_{1} << x_{2} 可以推导出 g_{1} << g_{2} 。又由于梯度下降公式W_{j}^{t+1} = W_{j}^{t} - \eta \cdot gradient_{j} ,所以我们能得出结论:每次 \theta_{1} 的调整幅度要远小于 \theta_{2} 的调整幅度

根据上述的两个结论,我们可以发现, \theta_{2} 的路程更短,但是步幅更长,意味着相比较 \theta_{1}\theta_{2} 只需要用更少的迭代次数就可以收敛。而我们为了求得最优解,就必须每个维度的 \theta 都收敛才可以,所以就会出现 \theta_{2} 等待 \theta_{1} 的情况。这就是右上图中 \theta 先往下走再往右走的原因。

我们使用归一化的目的就是使得梯度下降的时候可以让不同维度的 \theta 参数都在较为接近的调整幅度上。这就好比社会主义,先使一小部分的人富起来,使损失整体下降,最后等另一部分人富起来。但是更好的情况其实是实现共同富裕,每个人都不落下,让优化的步伐是一致的(如左上图所示)。

2.归一化(Normalization)的本质

归一化的本质是将数据转换到统一的尺度上,使得不同特征或数据点之间具有可比性,简化了数据处理的复杂性,并提高了算法的效率和稳定性。

我们现在知道了归一化的目的是让每个维度的参数共同富裕。梯度下降优化时不能达到步调一致的根本原因其实还是 x_{1} 和 x_{2} 的数量级不同。而归一化可以把 x_{1} 和 x_{2} 的数量级给它统一,扩展一点说,如果有更多特征维度,就要把各个特征维度 x_{1} ,...,x_{n} 的数量级统一,来做到无量纲化。   

二、常见的归一化方法

接下来我们来介绍两种常见的归一化方法。

1.最大值最小值归一化

最大值最小值归一化(Min-Max Scaling)可以将数据映射到特定的区间,如[0,1]或[-1,1]。它的公式为:

x_{i,j}^{*} = \frac{x_{i,j} - x_{j}^{min}}{x_{j}^{max} - x_{j}^{min}}

在这个公式当中,x_{j}^{min} 对应着 X 矩阵中第 j 列特征值中的最小值。同样地,x_{j}^{max} 是对应 X 矩阵中第 j  列特征值中的最大值。x_{i,j} 是 X 矩阵中第 i 行第 j 列的数值,x_{i,j}^{*} 是归一化之后的 X 矩阵中第 i 行第 j 列的数值。

举个例子,比如第 j 列的数值是 [1,2,3,5,5] , x_{j}^{min}  就是 1,x_{j}^{max}  就是 5,那么归一化 之后是 [0,0.25,0.75,1,1] 。如果第 j 列的数值是 [1,2,3,5,50001] ,那么归一化之后是[0,0.00004,0.00006,0.0001,1] 。

从这个例子中我们可以很容易地发现,使用最大值最小值归一化的时候,优点是一定可以把数值归一化到 [0,1] ,缺点是如果有离散值,会使一个数值为1,其它数值几乎为0,所以受到离散值的影响比较大。

2.标准归一化

通常标准归一化中包含了均值归一化方差归一化。经过处理的数据符合标准正态分布,即均值为0,标准差为1,其转化函数为:

x_{i,j}^{new} = \frac{x_{i,j} - x_{mean} }{Standard-Deviation}

我们也通常将其表示成:

x_{i,j}^{new} = \frac{x_{i,j} - \mu_{j} }{\sigma _{j}}

其中 \mu_{j} 为某列样本数据的均值,\sigma_{j} 为某列样本数据的标准差。

Mean(population) = \mu = \frac{\sum_{k}^{i = 1}f_{i}x_{i}}{n}

StandardDeviation(population) = \sigma =\sqrt{\sum_{k}^{i = 1}}\frac{f_{i}(x_{i}-\mu )^{2}}{n}

其中的 i 为行数,f_{i} 为不同行中 x_{i} 的权重,这里我们可以默认将其看作是 1 。

相对于最大值最小值归一化公式计算机时除以最大值减最小值来说,标准归一化除以的是标准差,而标准差的的计算会考虑到本列样本中的所有样本数据,这样受到离群值的影响就会小很多。这就是方差归一化的好处。

那么我们为什么要减去均值呢?我们可以通过下图来看出。 下左图是梯度下降法的公式,其中 \alpha 代表学习率,A 代表梯度计算中的 h_{\theta}x - y (详情请阅读博客12.梯度下降法的具体解析——举足轻重的模型优化算法-CSDN博客)。我们可以从中看出,当 x_{i} > 0 时,所有维度的梯度都是朝着一个方向前进的,因为每个维度的学习率 \alpha 和误差 A 都是相同的,这就导致了下右图的问题。当我们想将梯度从 W_{t} 变为 W_{t+1} 时,维度1中的 W_1 在下降,维度2中的 W_2 在增加,这就跟我们左图所说的方法相违背。所以我们只能整体的先全部增加,再整体的全部下降,呈现出右下图三角形的另外两边,不能实现图上蓝色所示的最优路径,这样就浪费了我们很多迭代次数和时间。归其根本,还是大多数数据集的数据均为正数,所以我们减去均值,就是给梯度下降法的方向增加更多可能性,减少更多的迭代次数,这就是均值归一化的好处。 

总结

本篇博客重点介绍了归一化这种数据预处理方法。希望可以对大家起到作用,谢谢。


关注我,内容持续更新(后续内容在作者专栏《从零基础到AI算法工程师》)!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2218792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jupyter Notebook中 Save and Export Notebook As不显示选项

问题 Jupyter Notebook中 Save and Export Notebook As 不显示选项&#xff08;保存和导出没有选项&#xff09; 解决 在jupyter notebook所在环境卸载jupyter_contrib_nbextensions&#xff0c;这是我之前安装的一个扩展工具集&#xff0c;从而导致上面的问题。 pip unin…

自动化数据处理:使用Selenium与Excel打造的数据爬取管道

随着互联网信息爆炸式增长&#xff0c;获取有效数据成为决策者的重要任务。人工爬取数据不仅耗时且效率低下&#xff0c;因此自动化数据处理成为一种高效解决方案。本文将介绍如何使用Selenium与Excel实现数据爬取与处理&#xff0c;结合代理IP技术构建一个可稳定运行的数据爬取…

Nodejs使用http模块创建Web服务器接收解析RFID读卡器刷卡数据

本示例使用设备&#xff1a; https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1buHvw58&ftt&id22173428704 Javascript源码 //引用http模块创建web服务器&#xff0c;监听指定的端口获取以GET、POST、JSON等方式上传的数据&#xff0c;并回应驱动读卡…

图像梯度-Sobel算子、scharrx算子和lapkacian算子

文章目录 一、认识什么是图像梯度和Sobel算子二、Sobel算子的具体使用三、scharrx算子与lapkacian(拉普拉斯)算子 一、认识什么是图像梯度和Sobel算子 图像的梯度是指图像亮度变化的空间导数&#xff0c;它描述了图像在不同方向上的强度变化。在图像处理和计算机视觉中&#x…

CUDA error: out of memory问题

加载模型时&#xff0c;模型也不大&#xff0c;GPU内存也完全够&#xff0c;但就是出现这个CUDA内存溢出问题。 究其原因&#xff0c;在于model.load_state_dict(torch.load(‘pretrain-model.pth’, map_locationdevice))这个代码省略了map_locationdevice 通过torch.load加载…

YOLOv11来了 | 自定义目标检测

概述 YOLO11 在 2024 年 9 月 27 日的 YOLO Vision 2024 活动中宣布&#xff1a;https://www.youtube.com/watch?vrfI5vOo3-_A。 YOLO11 是 Ultralytics YOLO 系列的最新版本&#xff0c;结合了尖端的准确性、速度和效率&#xff0c;用于目标检测、分割、分类、定向边界框和…

问题清除指南|alimama-creative/FLUX-Controlnet-Inpainting 运行注意事项

前言&#xff1a;近日验证想法需要用到inpainting技术&#xff0c;选择了https://github.com/alimama-creative/FLUX-Controlnet-Inpainting进行测试&#xff0c;在实现过程中遇到几个小问题&#xff0c;在此分享一下解决经验。 1. 下载预训练模型到本地 由于在huggingface官网…

React Agent 自定义实现

目录 背景 langchin 中的 agent langchin 中 agent 的问题 langchain 的 agent 案例 自定义 React Agent 大模型 工具定义 问题设定 问题改写&#xff0c;挖掘潜在意图 React Prompt 下一步规划 问题总结 代码 背景 之前使用过 langchian 中的 agent 去实现过一些…

WordPress监控用户行为回放插件

在数字营销的世界里&#xff0c;了解用户行为是提升用户体验和转化率的关键。nicen-replay 插件&#xff0c;它能够让您轻松回放用户在网站上的每一步操作&#xff0c;从点击到滚动&#xff0c;再到表单填写&#xff0c;每一个细节都清晰可见 nicen-replay&#xff0c;是一款可…

C#从零开始学习(类型和引用)(4)

类型 本章所有的代码都放在 https://github.com/hikinazimi/head-first-Csharp 整型 byte: 0~255sbyte: -128~127short: -32768~32767int: -2147483648~2147483647long: -9223372036854775808~9223372036854775807 以u开头的无符号整数 ushort,uint,ulong 浮点 float: (6~9…

RHCE【远程连接服务器】

目录 一、远程连接服务器简介 二、加密技术简介 SSH工作过程&#xff1a; &#xff08;1&#xff09;版本协商阶段 &#xff08;2&#xff09;密钥和算法协商阶段 &#xff08;3&#xff09;认证阶段 &#xff08;4&#xff09;会话请求阶段 &#xff08;5&#xff0…

KUKA外部自动配置(上)

通过外部PLC对机器人自动运行进程进行控制&#xff0c;其控制原理是&#xff1a;外部PLC通过外部自动运行接口向机器人控制系统发出机器人进程的相关信号&#xff08;如&#xff1a;运行许可、故障确认、程序启动等&#xff09;&#xff0c;机器人控制系统向外部PLC系统发送有关…

STM32 I2C通信协议详解

文章目录 STM32 I2C通信协议详解一、I2C协议概述二、物理层特性总线结构&#xff1a;引脚定义&#xff1a;电平特性&#xff1a;地址机制&#xff1a; 三、协议层机制起始信号&#xff1a;停止信号&#xff1a;数据有效性&#xff1a;应答信号&#xff08;ACK&#xff09;&…

机器学习|Pytorch实现天气预测

机器学习|Pytorch实现天气预测 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 电脑系统&#xff1a;Windows11 显卡型号&#xff1a;NVIDIA Quadro P620 语言环境&#xff1a;python 3.9.7 编译器&#x…

【Python】selenium遇到“InvalidArgumentException”的解决方法

在使用try……except 的时候捕获到这个错误&#xff1a; InvalidArgumentException: invalid argument (Session info: chrome112.0.5614.0) 这个错误代表的是&#xff0c;当传入的参数不符合期望时&#xff0c;就会抛出这个异常&#xff1a; InvalidArgumentException: invali…

常见TCP/IP协议基础——计算机网络

目录 前言常见协议基础常见协议-基于TCP的应用层协议常见协议-基于UDP的应用层协议常见协议-网络层协议习题自测1.邮件发送协议2.接收邮件协议端口3.建立连接4.层次对应关系5.FTP服务器端口 前言 本笔记为备考软件设计师时的重点知识点笔记&#xff0c;关于常见TCP/IP协议基础…

Java【多线程】wait和notify

目录 wait / notify 由于线程之间是抢占式执⾏的, 因此线程之间执⾏的先后顺序难以预知. 但是实际开发中有时候我们希望合理的协调多个线程之间的执⾏先后顺序. wait / notify 等待/通知 协调线程之间的执行逻辑的顺序的 可以让后执行的逻辑等待先执行的逻辑 虽然无法直接…

缓存框架JetCache源码解析-缓存定时刷新

作为一个缓存框架&#xff0c;JetCache支持多级缓存&#xff0c;也就是本地缓存和远程缓存&#xff0c;但是不管是使用着两者中的哪一个或者两者都进行使用&#xff0c;缓存的实时性一直都是我们需要考虑的问题&#xff0c;通常我们为了尽可能地保证缓存的实时性&#xff0c;都…

word取消自动单词首字母大写

情况说明&#xff1a;在word输入单词后首字母会自动变成大写 &#xff08;1&#xff09;点击菜单栏文件 &#xff08;2&#xff09;点击“更多”——>“选项” &#xff08;3&#xff09;点击“校对”——>“自动更正选项” &#xff08;4&#xff09;取消“句首字母大写…

WPF样式详解:行内样式、模板样式和页面样式的全方位分析

Windows Presentation Foundation (WPF) 是微软推出的一种用于构建桌面应用程序的UI框架。WPF 提供了强大的样式和模板机制&#xff0c;允许开发人员以声明的方式定义和复用UI元素的视觉外观。本文将深入探讨WPF的行内样式、模板样式和页面样式&#xff0c;帮助您在实际开发中更…