机器学习-归一化

devtools/2025/1/16 21:07:31/

文章目录

  • 一. 归一化
  • 二. 归一化的常见方法
    • 1. 最小-最大归一化 (Min-Max Normalization)
    • 2. Z-Score 归一化(标准化)
    • 3. MaxAbs 归一化
  • 三. 归一化的选择
  • 四. 为什么要进行归一化
    • 1. 消除量纲差异
    • 2. 提高模型训练速度
    • 3. 增强模型的稳定性
    • 4. 保证正则化项的有效性
    • 5. 避免数值计算问题

一. 归一化

归一化(Normalization)是数据预处理中的一种常用方法,主要用于将不同尺度的数据转换到一个统一的范围内,通常是将数据缩放到一个固定的区间,如 [0, 1] 或 [-1, 1]。归一化有助于消除特征之间的量纲差异,使得所有特征在同一个尺度上进行计算,避免某些特征对模型的训练过程产生过大影响。
在这里插入图片描述

二. 归一化的常见方法

1. 最小-最大归一化 (Min-Max Normalization)

最常见的归一化方法,将数据按比例缩放到指定的区间(通常是 [0, 1])。其公式为:

x ′ = x − min ⁡ ( x ) max ⁡ ( x ) − min ⁡ ( x ) x' = \frac{x - \min(x)}{\max(x) - \min(x)} x=max(x)min(x)xmin(x)

其中:

  • ( x ) ( x ) (x) 是原始数据;
  • ( min ⁡ ( x ) ) ( \min(x) ) (min(x)) 是数据集中的最小值;
  • ( max ⁡ ( x ) ) ( \max(x) ) (max(x)) 是数据集中的最大值;
  • ( x ′ ) ( x' ) (x) 是归一化后的数据。

优点

  • 适用于数据范围已知且具有固定上下界的情况。
  • 结果数据范围固定,便于后续操作。

缺点

  • 对于异常值非常敏感,异常值可能会拉大数据的范围,使得大部分数据集中在某一小范围内。

2. Z-Score 归一化(标准化)

Z-Score 归一化将数据转换为具有零均值和单位方差的分布,常用于需要满足正态分布假设的机器学习算法中。其公式为:

x ′ = x − μ σ x' = \frac{x - \mu}{\sigma} x=σxμ

其中:

  • ( x ) ( x ) (x) 是原始数据;
  • ( μ ) ( \mu ) (μ) 是数据集的均值;
  • ( σ ) ( \sigma ) (σ) 是数据集的标准差;
  • ( x ′ ) ( x' ) (x) 是标准化后的数据。

优点

  • 对异常值不敏感,能保持数据的分布形态。
  • 保持数据的相对差异,适用于大多数机器学习算法,尤其是需要度量距离的算法。

缺点

  • 对数据本身的分布要求较高,尤其是对于数据呈现非正态分布时,可能需要更多的处理。

正态分布
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3. MaxAbs 归一化

将每个特征值除以其最大绝对值,使得数据的范围在 [-1, 1] 之间。这种方法在数据中没有负值时,尤其适用。

x ′ = x max ⁡ ( ∣ x ∣ ) x' = \frac{x}{\max(|x|)} x=max(x)x

优点

  • 保留了稀疏矩阵的零值,适合处理稀疏数据。
  • 不改变数据的分布形态,适用于数据不含异常值的情况。

缺点

  • 数据不一定遵循均值为0的分布,可能对一些算法(如线性回归)不太适用。

三. 归一化的选择

  • 如果数据的数值范围已知且有明确的上下限(如图像像素值通常在[0, 255]之间),使用 最小-最大归一化 比较合适。
  • 如果数据的分布较为均匀,且目标是让特征符合标准正态分布,使用 Z-Score 归一化(标准化) 更为合适。
  • 如果数据本身已经分布得很好,且不希望改变分布特性,可以选择 MaxAbs 归一化

总之,归一化是对特征进行尺度调整的过程,选择合适的归一化方法能够显著提高模型的表现和训练效率。

四. 为什么要进行归一化

1. 消除量纲差异

不同特征可能有不同的单位或量纲,例如,某些特征可能是温度(单位是摄氏度或华氏度),而其他特征可能是收入(单位是人民币、美元等)。这些特征的数值范围可能相差很大。比如,温度可能在0到100之间,而收入可能在几千到几百万之间。如果不进行处理,这种量纲差异可能会导致一些特征在模型中占主导地位,影响模型的学习效果。
归一化:将数据缩放到一个固定的范围(如[0, 1])。这样可以消除量纲差异,让每个特征在同一尺度上进行处理。
标准化:通过去除均值并除以标准差,使数据具有零均值和单位方差。标准化后的数据使得每个特征的分布更加一致,便于算法进行处理。

2. 提高模型训练速度

许多机器学习算法,特别是基于梯度下降的算法(如线性回归、逻辑回归、神经网络等),对特征的尺度非常敏感。如果数据的尺度不一致,某些特征可能对梯度的更新产生较大影响,而其他特征则几乎没有影响。这样会导致优化过程收敛速度慢,甚至不收敛。

通过归一化或标准化,可以确保所有特征对模型的贡献大致相同,从而加快收敛速度,避免梯度爆炸或梯度消失问题。

3. 增强模型的稳定性

一些模型,如支持向量机(SVM)、K-近邻(KNN)和K-means聚类等,基于距离度量(如欧式距离、曼哈顿距离等)来进行预测或分类。如果特征的尺度差异较大,模型计算距离时,尺度较大的特征会主导距离计算,从而影响预测结果。通过归一化或标准化,特征尺度变得一致,能提高模型的稳定性和预测准确性。

4. 保证正则化项的有效性

在一些机器学习算法中,正则化项(如L2正则化)用于控制模型的复杂度,避免过拟合。如果特征的尺度差异较大,某些特征可能会对正则化项产生较大影响,导致模型偏向某些特征,进而影响模型的泛化能力。归一化或标准化后,正则化项会对所有特征产生更均衡的影响,有助于提高模型的鲁棒性。

5. 避免数值计算问题

在某些机器学习算法中,如果输入数据的数值范围过大,可能会导致计算中的数值稳定性问题。例如,在神经网络中,输入数据的数值过大可能导致梯度更新过程不稳定,进而影响训练过程。通过归一化或标准化,可以避免这种数值计算问题。


http://www.ppmy.cn/devtools/151056.html

相关文章

AIDD - 人工智能药物设计 -深度学习赋能脂质纳米颗粒设计,实现高效肺部基因递送

Nat. Biotechnol. | 深度学习赋能脂质纳米颗粒设计,实现高效肺部基因递送 今天为大家介绍的是来自美国麻省理工和爱荷华大学卡弗医学院团队的一篇论文。可离子化脂质(ionizable lipids)是脂质纳米颗粒(lipid nanoparticles&#…

科技赋能:多功能气膜综合馆引领场馆新革命—轻空间

在现代体育场馆建设中,如何为运动员提供更佳的比赛环境,为观众营造更舒适的观赛体验,已成为场馆设计的关键课题。而多功能气膜综合馆以其独特的声学优化技术和卓越的场馆功能,成功突破了传统气膜场馆的局限,为运动体验…

Docker中编码和时区设置不生效问题排查

一、编码不生效排查 在 docker-compose.yml 中设置了环境变量,但进入 Docker 容器后 LANG 仍然显示为 zh_CN.UTF-8,按照以下步骤进行排查和修复: 1. 确保设置正确 确保你的 docker-compose.yml 文件中环境变量设置没有拼写错误,示…

互联网架构困境:TCP/IP 拥塞难题与地址对称性

副标题:作为内容分发的互联网协议演进 注意,“作为内容分发的互联网” 修饰,这意味着本文缺失了 “作为对等通信的互联网” 的内容,这是有意为之,因为互联网一开始就源自对等通信,稍微照顾内容分发(FTP)&a…

unity学习18:unity里的 Debug.Log相关

目录 1 unity里的 Debug.log相关 2 用Debug.DrawLine 和 Debug.DrawRay画线 2.1 画线 1 unity里的 Debug.log相关 除了常用的 Debug.Log,还有另外2个 Debug.Log("Debug.Log"); Debug.LogWarning("Debug.LogWarning"); Debug.LogErro…

vue使用自定义指令实现水印

水印指令 封装自定义水印指令在main.js中全局注册指令项目中使用指令 封装自定义水印指令 在项目中创建一个watermark.js文件,封自定义自定的方法,这个文件不需要修改可以直接复制粘贴使用,当然可以根据自己的水印样式需求,去修改…

java进行pdf文件压缩

文章目录 pdf文件压缩 pdf文件压缩 添加依赖 <dependency><groupId>com.luhuiguo</groupId><artifactId>aspose-pdf</artifactId><version>23.1</version> </dependency>public class OptimizePdf {public static void opti…

30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <5> 5分钟集成好caffeine并使用注解操作缓存

快速导航 <1> 5分钟快速创建一个springboot web项目 <2> 5分钟集成好最新版本的开源swagger ui&#xff0c;并使用ui操作调用接口 <3> 5分钟集成好druid并使用druid自带监控工具监控sql请求 <4> 5分钟集成好mybatisplus并使用mybatisplus generator自…