Matlab系列(005) 一 归一化

目录

  • 1、前言
  • 2、什么是归一化?
  • 3、为什么要进行归一化
  • 4、归一化方法详解与Matlab实现
  • 5、总结

1、前言

​   归一化技术是数据预处理的核心环节,本文将深度解析主流归一化方法,提供可复现Matlab代码,并探讨其在各领域中的应用场景。

2、什么是归一化?

  归一化是数据预处理的核心技术之一,它将不同量纲、不同数量级的特征数据转换到统一的数量范围。通过消除特征的量纲差异和数量级影响,归一化使数据具有可比性,为后续的数据分析和建模奠定基础。

3、为什么要进行归一化

3.1 消除量纲影响
  不同特征可能有完全不同的量纲(如年龄(岁)vs 收入(万元)),直接计算会导致量纲大的特征主导结果。
3.2 加速模型收敛
  梯度下降类算法中,归一化后的数据能使损失函数的等高线更接近圆形,大幅提高收敛速度。
3.3 提高模型精度
  基于距离的算法(如KNN、SVM、K-Means)对特征尺度敏感,归一化可防止大范围特征淹没小范围特征。
3.4 避免数值问题
  大数值可能导致计算溢出(如指数函数)或精度损失。
3.5 统一优化步长
  各特征方向上的步长一致,提高优化效率。

4、归一化方法详解与Matlab实现

4.1 最小-最大归一化
  原理:线性映射原始数据到[0,1]区间
公式:
Xnorm=x−min(x)max(x)−min(x)Xnorm= {{\frac{x-min(x)}{max(x)-min(x)}}}Xnorm=max(x)min(x)xmin(x)

特点:
(1)对异常值敏感(最大值/最小值易受离群点影响)。
(2)适用于数据分布未知的情况。
代码:

clc
clear
close all
%%
data=[10,2,20,4, 30, 6, 40, 8];min_val = min(data);
max_val = max(data);
normalized_data = (data - min_val) ./ (max_val - min_val);disp('最小-最大归一化结果:');
disp(normalized_data);
%%
%结果
最小-最大归一化结果:0.2105         0    0.4737    0.0526    0.7368    0.1053    1.0000    0.1579

4.2 均值归一化
  原理:均值归一化是数据预处理中常用的一种归一化技术,将数据范围限制在[-1,1]区间内。
公式:
Xnorm=x−mean(x)max(x)−min(x)Xnorm= {{\frac{x-mean(x)}{max(x)-min(x)}}}Xnorm=max(x)min(x)xmean(x)
特点:
(1)相比最小-最大归一化,均值归一化保留了数据的分布形状。
(2)使数据均值为0,有利于许多机器学习算法。
(3)适用于同时包含正负值的数据集。
(4)相比Z-score标准化,输出范围受限,减少数值问题。
代码:

clc
clear
close all
%%data=[10,2,20,4, 30, 6, 40, 8];min_val = min(data);
max_val = max(data);normalized_data = (data - mean(data)) ./ (max_val - min_val);disp('均值归一化结果:');
disp(normalized_data);
%%
%结果
均值归一化结果:-0.1316   -0.3421    0.1316   -0.2895    0.3947   -0.2368    0.6579   -0.1842

4.3 Z-Score标准归一化
  原理:将数据转换为均值为0、标准差为1的分布。
公式:
z=x−μ​σz = {{\frac{x-μ​}{σ}}}z=σxμ
解释:
x:原始数据。
μ​:数据的均值。
σ:标准差。

特点:
(1)对异常值有一定鲁棒性。
(2)输出范围不受限。
(3)要求数据近似服从正态分布。
代码:

clc
clear
close all
%%
data=[10,2,20,4, 30, 6, 40, 8];
% 使用示例:
mu = mean(data);
sigma = std(data,1);
z_data = (data - mu) ./ sigma;disp('Z-Score标准归一化结果:');
disp(z_data);
%结果
Z-Score标准归一化结果:-0.3892   -1.0120    0.3892   -0.8563    1.1677   -0.7006    1.9462   -0.5449

4.4 鲁棒归一化
  原理:使用四分位数代替极值,降低异常值影响。
公式:
Xrobust=x−Median(x)​IQR(x)Xrobust = {{\frac{x-Median(x)​}{IQR(x)}}}Xrobust=IQR(x)xMedian(x)
解释:
(1)x:原始数据。
(2)Median(x)​:数据的中位数。
(3)IQR(X)​​:四分位距。它是​​上四分位数与​​下四分位数之差。
特点:
(1)异常值鲁棒性​​:最大优点,在数据包含异常值或存在重尾分布时表现卓越。
(2)保留信息​​:不会像删除异常值那样造成信息损失。
(3)中位数和IQR的可解释性​​:这些统计量比均值和方差更易于理解。
(4)输出范围不固定​​:转换后的数据没有固定的范围(如[0,1]),这对于某些需要严格输入范围的算法(如神经网络)可能是个问题。
(5) ​​对数据分布敏感​​:如果数据的中间50%(Q1到Q3)不能代表数据的整体分布,鲁棒缩放可能效果不佳。
(6)不适用于小数据集​​:四分位数的计算在小数据集上可能不稳定。
(7)忽略异常值但未处理​​:它只是降低了异常值的影响,但异常值仍然存在于数据中。
代码:

clc
clear
close all
%%
% 使用示例(含异常值):
data=[10,2,20,4, 30, 6, 40, 8];
robust_data = robust_norm(data);
disp('鲁棒归一化结果:');
disp(robust_data);function robust_data = robust_norm(data)median_val = median(data);Q1 = quantile(data, 0.25);Q3 = quantile(data, 0.75);IQR = Q3 - Q1;% 处理IQR为0的列IQR(IQR == 0) = 1;robust_data = (data - median_val) ./ IQR;
end
%结果
鲁棒归一化结果:0.0500   -0.3500    0.5500   -0.2500    1.0500   -0.1500    1.5500   -0.0500

4.5 最大绝对值缩放
​   原理:将数据按特征最大绝对值缩放至[-1,1]区间。
公式:
Xrobust=xmax⁡(∣x∣)Xrobust = {{\frac{x}{max⁡(∣x∣)}}}Xrobust=max(x)x
特点:
(1)保留数据稀疏性(不会移动数据中心)
(2)适用于稀疏数据(如文本处理)
代码:

clc
clear
close all
%%
% 使用示例:
data=[10,2,20,4, 30, 6, 40, 8];
maxabs_data = maxabs_norm(data);
disp('最大绝对值缩放结果:');
disp(maxabs_data);function maxabs_data = maxabs_norm(data)max_abs = max(abs(data));% 处理全零列max_abs(max_abs == 0) = 1;maxabs_data = data ./ max_abs;
end
%结果
最大绝对值缩放结果:0.2500    0.0500    0.5000    0.1000    0.7500    0.1500    1.0000    0.2000

4.6 非线性归一化方法

​   除了上述的线性归一化,还有非线性归一化。非线性归一化​​是指通过​​非线性函数​​对数据进行变换,其目的不仅是改变数据的尺度和中心,更重要的是​​改变数据的分布形状​​(如偏度、峰度)。与线性归一化只是进行缩放和平移不同,非线性变换能够压缩分布的一端、拉伸另一端,从而更好地满足模型的假设或揭示数据的内在结构。
(1)对数变换
公式:
logdata=sign(data).∗log(1+abs(data))log_data = sign(data) .* log(1 + abs(data))logdata=sign(data).log(1+abs(data))
说明:支持负值
代码:

clc
clear
close all
%%
% 使用示例:
data=[10,2,20,4, 30, 6, 40, 8];
log_data = sign(data) .* log(1 + abs(data)); 
disp('对数变换:');
disp(log_data);
%结果
对数变换:2.3979    1.0986    3.0445    1.6094    3.4340    1.9459    3.7136    2.1972

(2)反正切变换
公式:
atandata=atan(data)∗2/piatan_data = atan(data) * 2 / piatandata=atan(data)2/pi
说明:可以映射到[-1,1]
代码:

clc
clear
close all
%%
% 使用示例:
data=[10,2,20,4, 30, 6, 40, 8];
atan_data = atan(data) * 2 / pi;
disp('反正切变换:');
disp(atan_data);
%结果:
反正切变换:0.9365    0.7048    0.9682    0.8440    0.9788    0.8949    0.9841    0.9208

(3) Sigmoid变换
公式:
sigmoiddata=1./(1+exp(−data))sigmoid_data = 1 ./ (1 + exp(-data))sigmoiddata=1./(1+exp(data))
代码:

clc
clear
close all
%%
% 使用示例:
data=[10,2,20,4, 30, 6, 40, 8];
sigmoid_data = 1 ./ (1 + exp(-data));disp('反正切变换:');
disp(sigmoid_data);
%结果:
Sigmoid变换:1.0000    0.8808    1.0000    0.9820    1.0000    0.9975    1.0000    0.9997

5、总结

​   归一化作为数据预处理的基石,通过消除特征间的量纲差异和数量级影响,显著提升模型的性能和稳定性。没有"最好"的归一化方法,需根据数据特性和模型需求选择,不同应用场景下的方法选择策略。

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

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

相关文章

【K8s】整体认识K8s之namespace

命名空间将资源划分为相互隔离的组。kubectl get namespace/ns系统默认创建四个namespace,分别是default、kube-node-lease、kube-public、kube-system。default 没有指明使用其它命名空间的对象所使用的默认命名空间、kube-system 系统创建对象所使用的命名空间。…

rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十八) 使用表格

使用表格egui_extras::TableBuilder // Cargo.toml [dependencies] eframe "0.32.1" egui "0.32.1" egui_extras "0.32.1"egui_extras::Column::auto() 列宽根据内容自动计算.resizable(true) 允许用户手动拖动调整列宽 fn main() -> efra…

【C#】构造函数实用场景总结

文章目录前言一、构造函数是什么?二、构造函数的用法1.初始化对象,避免无效状态2 初始化静态成员3 构造函数重载4.构造函数链5. 单例模式,多次实例化保持一个对象6. 依赖注入7. 初始化只读对象前言 构造函数是我们平常编程里经常能碰到的老伙…

LLM预训练架构全解析:从零构建一个语言世界的“操作系统”

导读:作为开发者,我们每天都在import或#include各种库,我们信任这些由无数代码构成的底层依赖。那么,当我们调用一个LLM时,它所依赖的那个更底层的、无形的**“语言操作系统”**,又是如何被“编译”出来的&…

Linux服务测试题(DNS,NFS,DHCP,HTTP)

一,实验拓扑:二,需求APPSRV:主机名:appsrv.example.comip地址:192.168.100.10网关:192.168.100.254网卡为NAT模式STORAGESRV:主机名:storagesrv.example.comip地址&#…

DevOps 简介及就业前景

DevOps 简介及就业前景 目录 DevOps简介核心概念重难点解析具体场景使用就业前景学习路径最佳实践 DevOps简介 什么是DevOps DevOps是Development(开发)和Operations(运维)的组合词,是一种软件开发和IT运维的文化…

《CF1120D Power Tree》

题目描述 给定一棵有 n 个顶点的有根树,树的根为顶点 1。每个顶点都有一个非负的价格。树的叶子是指度为 1 且不是根的顶点。 Arkady 和 Vasily 在树上玩一个奇怪的游戏。游戏分为三个阶段。第一阶段,Arkady 购买树上的一些非空顶点集合。第二阶段&…

CPTS-Agile (Werkzeug / Flask Debug)

枚举 nmap -sC -sV -T4 -Pn -n -p- 10.10.11.203进行常规的网页枚举和测试发现报错信息,‘Werkzeug / Flask Debug’ 测试Export导出功能发现存在路径遍历查看这篇文章 https://book.hacktricks.wiki/zh/network-services-pentesting/pentesting-web/werkzeug.html#…

【网络运维】Shell 脚本编程:while 循环与 until 循环

Shell 脚本编程:while 循环与 until 循环 循环结构简介 循环语句是 Shell 脚本中用于重复执行一条或一组指令的重要工具,直到满足特定条件时停止执行。Shell 脚本中常见的循环语句包括 while、until、for 和 select。本文将重点介绍 while 和 until 两种…

LLM 中评价指标与训练概要介绍

在【LLM】LLM 中增量解码与模型推理解读一文中对 LLM 常见名词进行了介绍,本文会对 LLM 中评价指标与训练概要进行介绍,本文并未介绍训练实操细节,未来有机会再了解~ 一、LLM 如何停止输出 在看 LLM 评价指标前,先看…

Java 20 新特性及具体应用

目录 1. 模式匹配 for switch(预览特性) 2. 记录模式(预览特性) 3. 外部函数与内存 API(预览特性) 4. 矢量 API(孵化器特性) 5. 作用域值(预览特性) 6. …

【STM32】CubeMX(十一):FreeRTOS任务挂起与解挂

这篇文章是 STM32 HAL FreeRTOS 下的任务挂起与恢复机制, 结合 CubeMX 图示与代码,构建了一个 FreeRTOS 控制示例。 本篇目标:创建两个任务: 一个控制蓝灯闪烁(myTask01) 另一个监控按键(Start…

图片预加载:提升Web性能的关键

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…

大模型压缩三剑客:量化、剪枝与知识蒸馏全解析

在人工智能飞速发展的今天,大语言模型(LLM)如通义千问、GPT 等已成为推动智能应用的核心引擎。然而,这些模型动辄数十亿甚至上千亿参数,带来了高昂的计算成本和部署门槛。如何在不显著牺牲性能的前提下,让大…

Seaborn数据可视化实战:Seaborn基础图表绘制入门

基础图表绘制:Seaborn入门教程 学习目标 通过本课程的学习,你将掌握如何使用Seaborn库绘制基础图表,包括条形图、折线图和散点图。你将了解Seaborn的基本函数和参数设置,以及如何通过调整这些参数来优化图表的视觉效果。 相关知识…

阿里开源通义万相Wan2.2:视频生成技术的革命性突破

在人工智能视频生成领域,阿里云通义实验室于2025年7月重磅开源了新一代视频生成大模型 Wan2.2,其核心亮点包括人体动作生成的极致精度、电影级美学表达以及高效的资源利用效率,标志着视频生成技术迈入了一个全新的阶段。 一、核心功能:三大模型,覆盖全场景视频生成 Wan2.…

说说你对Integer缓存的理解?

大家好,我是锋哥。今天分享关于【说说你对Integer缓存的理解?】面试题。希望对大家有帮助; 说说你对Integer缓存的理解? 超硬核AI学习资料,现在永久免费了! Integer 缓存是 Java 中一个优化机制,它主要通过缓存一部…

高速CANFD收发器ASM1042在割草机器人轮毂电机通信系统中的适配性研究

摘要割草机器人轮毂电机的通信系统对其实现自主控制和高效作业至关重要。本文旨在研究国科安芯推出的高速CANFD收发器芯片ASM1042是否能够满足割草机器人轮毂电机通信系统的复杂需求。通过详细分析轮毂电机通信系统的性能要求,以及ASM1042的电气、功能和环境特性&am…

MTK Linux DRM分析(十二)- KMS Panel框架层(drm_panel.c、drm_mipi_dbi.c、drm_mipi_dsi.c)

一、简介 三个代码文件(drm_mipi_dbi.c、drm_panel.c、drm_mipi_dsi.c)的分析。这些文件都是Linux内核DRM(Direct Rendering Manager)子系统的组成部分,主要用于支持显示面板,特别是通过MIPI(Mobile Industry Processor Interface)接口的显示设备。它们提供了显示驱动…

合合信息acge模型获C-MTEB第一,文本向量化迎来新突破

前言: 在当今时代,大型语言模型以其惊人的发展速度和广泛的应用前景,正成为全球科技界的瞩目焦点。这些模型的强大能力,源自于背后默默支撑它们的Embedding技术——一种将语言转化为机器可理解的数值向量的关键技术。随着大型语言…