归一化还是标准化?如何为你的数据选择最佳缩放方法

article/2025/6/8 10:20:26

为什么你的模型需要"身高均等"?

想象一下,如果你在篮球队里同时安排了姚明(2.29米)和"小土豆"姜山(1.65米)一起打球,结果会怎样?显然,姚明会"主宰"比赛节奏。机器学习算法中的特征也是如此,不同量级的特征若不加处理,“身高优势"明显的特征就会霸占算法的"注意力”。

这就是为什么我们需要特征缩放(Feature Scaling)——让所有特征在同一个"身高标准"下竞争!

在这里插入图片描述

特征缩放:模型训练前的"身体检查"

在机器学习中,特征缩放就像运动员参赛前的体检,确保所有"选手"处于相同的起跑线上。它有以下重要性:

  1. 避免"巨人主宰比赛":如果你的数据中有些特征值域很大(比如房价:几十万到几百万),有些很小(比如房间数:1-10),不缩放的话,大值域特征会"喧宾夺主"。

  2. 加速"跑步"收敛:梯度下降算法就像是在山坡上寻找最低点的盲人,如果地形高低不平(特征尺度不一),他会走很多冤枉路。特征缩放让这位盲人在更"均匀"的地形上搜索,能更快找到目标。

  3. 距离计算的"公平竞争":想象KNN算法就是找"邻居"的过程,如果不缩放,那么在计算距离时,体重100kg的特征比身高1.8m的特征影响要大得多,这显然不公平!

举个例子:如果你的数据包含股票价格(2000-4000元)和利率(1.5%-3%),不缩放的话,股票价格的微小波动都会掩盖利率变化带来的影响。

归一化:让所有特征"手拉手站一排"

归一化(Normalization)的目标很简单:把所有特征的值都缩放到0到1之间,就像让不同身高的人蹲下或踮脚,最终都在同一水平线上。

归一化公式(Min-Max方法)

在这里插入图片描述

这个公式做了什么?很简单:

  • 首先找出特征的最小值和最大值
  • 然后让每个值减去最小值(平移到0开始)
  • 最后除以极差(最大值-最小值),让范围刚好是1

何时使用归一化?

归一化就像是给不同身高的选手分配统一的"标准身高",最适合以下场景:

  1. 数据分布不明确或不遵循任何特定分布时
  2. 深度学习的最爱:神经网络通常喜欢接收0-1范围内的数据(就像图像像素值从0-255归一化到0-1)
  3. 限定输出范围的算法,比如某些需要概率输入的模型

用Python实现归一化

from sklearn.preprocessing import MinMaxScaler
import numpy as np# 假设有身高(cm)和体重(kg)两个特征
data = np.array([[180, 85], [165, 65], [190, 95], [175, 75]])# 创建归一化器
scaler = MinMaxScaler()# 应用归一化
normalized_data = scaler.fit_transform(data)
print("归一化后的数据:
", normalized_data)
# 输出结果中,所有值都会在0到1之间

标准化:让特征们遵循"正态分布法则"

标准化(Standardization)则是另一种思路:不是限制值的范围,而是调整数据的统计属性,使得均值为0,标准差为1。

在这里插入图片描述

标准化的妙处

标准化后的数据就像是一群经过特殊训练的运动员,他们的平均水平是0,表现的波动程度是1。这样做有很多好处:

  1. 处理异常值的能手:归一化会被极端值搞得晕头转向,而标准化则能更好地处理这些"离群"选手
  2. 正态分布的好朋友:如果你的数据本来就接近正态分布,标准化后会更加"正态"
  3. 统计学家的最爱:很多统计模型假设数据是标准正态分布的,标准化满足这一前提

什么时候用标准化?

标准化就像是给运动员分配"表现分"而不是"排名",最适合以下场景:

  1. 数据服从或接近正态分布
  2. 存在异常值时(归一化会被异常值带偏)
  3. 使用涉及协方差的算法时,如PCA、SVM

用Python实现标准化

from sklearn.preprocessing import StandardScaler
import numpy as np# 同样的身高体重数据
data = np.array([[180, 85], [165, 65], [190, 95], [175, 75]])# 创建标准化器
scaler = StandardScaler()# 应用标准化
standardized_data = scaler.fit_transform(data)
print("标准化后的数据:
", standardized_data)
# 输出结果中,每个特征的均值接近0,标准差接近1

什么时候可以"逃课"?——不需要缩放的场景

并非所有算法都需要特征缩放。有些算法天生"公平",不会偏袒任何特征:

在这里插入图片描述

以下算法通常可以"免考":

  1. 决策树及其家族:决策树、随机森林、XGBoost等基于树的算法不关心特征的绝对大小,它们只关心数据的排序或分割点
  2. 基于计数的算法:如朴素贝叶斯

不过,对于KNN、K-Means这类基于距离的算法,虽然技术上可以不缩放,但缩放后效果通常更好(就像虽然篮球比赛中矮个子也能投篮,但调整篮框高度会更公平)。

如何选择:归一化 vs 标准化

选择归一化还是标准化,就像选择西装还是休闲装,没有绝对的对错,要看"场合":

归一化 (Normalization)标准化 (Standardization)
✅ 数据分布不明确时✅ 数据近似正态分布时
✅ 神经网络、深度学习模型✅ 存在异常值时
✅ 需要0-1输出的算法✅ PCA、SVM等需要方差信息的算法
❌ 存在很多异常值时❌ 需要限定范围的特征时

记住,没有"放之四海而皆准"的规则,最好的方法是:两种都试试,看哪种表现更好!

总结:特征缩放的艺术

特征缩放就像是在为机器学习模型"定制西装",让每个特征都能完美合身。无论是归一化的"统一制服",还是标准化的"量身定做",目标都是让模型训练更高效、结果更准确。

最后的建议:

  1. 当不确定时,优先尝试标准化
  2. 对模型进行超参数调优时,不要忘记特征缩放方法也是一个可调参数
  3. 记得在测试数据上使用与训练数据相同的缩放参数

掌握了特征缩放,你的模型就像穿上了"隐形斗篷",能够透过数据表象,看到真正的规律!


http://www.hkcw.cn/article/KpMRuWcpEr.shtml

相关文章

JS逆向-基础入门案例(详细步骤)

一、基础入门案例AES(详细步骤) https://36kr.com/p/952011547555464 点击搜索 输入 decrypt( 看看是否有AES.decrypt( 点进去之后,打断点,打完断点之后,进行刷新 复制内容,可以在控制台输入 可以看到能获取到明文数据 创建…

项目目标和期望未被清晰传达,如何改进?

在项目管理实践中,目标模糊、期望不明、沟通渠道混乱是导致项目偏离方向、资源浪费和团队士气低落的核心原因。根据PMI《项目管理知识体系指南》(PMBOK),超过39%的项目失败源于沟通不畅。要有效解决这一问题,必须优化沟…

推荐一款PDF压缩的工具

今天一位小伙伴找来,问我有没有办法将PDF变小的办法。 详细了解了一下使用场景: 小伙伴要在某系统上传一个PDF文件,原文件是11.6MB,但是上传时系统做了限制,只能上传小于10MB的文件,如图: 我听…

以太网帧结构和封装【三】-- TCP/UDP头部信息

TCP头部用于建立可靠连接、流量控制及数据完整性校验。 Ipv4封装tcp报: Ipv6封装tcp报: UDP头部信息 UDP关键协议特性: 1)无连接:无需握手,直接发送数据。 2)不可靠性:不保证数据…

61、ESB详解

ESB(Enterprise Service Bus,企业服务总线)是一种用于集成企业内不同应用程序和系统的中间件架构,它在企业信息化建设中扮演着关键角色,以下从核心概念、架构组成、功能特性、应用场景、优势与挑战几个方面进行详解&am…

六步完成软件验收:从计划到终验的全面指南(二)

在软件开发项目中,验收环节是确保软件质量、满足客户需求并成功交付的关键步骤。本文将为您详细介绍如何通过六个步骤,从计划到终验,全面完成软件验收工作。 四、执行验收测试并记录结果 按照验收测试计划,执行相应的测试用例&am…

fdisk给磁盘扩容实录

fdisk给磁盘扩容实录 步骤 1:对 /dev/sdb 进行分区步骤 2:创建物理卷(PV)步骤 3:将物理卷添加到卷组(VG)步骤 4:扩展逻辑卷(LV)步骤 5:调整文件系统大小步骤 1:对 /dev/sdb 进行分区 使用 fdisk 工具对 /dev/sdb 进行分区,创建一个新分区。 fdisk /dev/sdb 在 fd…

AbMole| Dimethyl sulfoxide(DMSO, 二甲基亚砜)

Dimethyl sulfoxide(DMSO,二甲基亚砜)是一种常用的有机溶剂,溶解能力强,能溶于水、乙醇、丙醇、乙醚、苯和氯仿等大多数有机物,可用于化合物等产品的溶解。 一、化学性质/溶解性/储存 分子量78.13分子式C2…

多线程1(Thread)

认识线程(Thread) 在进程中,要创建一个进程和销毁一个进程所消耗的硬件和软件资源是巨大的,因此为了优化上述过程,我们引入了“线程”。 线程是系统调度的基本单位。 1)线程和进程的关系 可以认为进程包…

如何进行页面前端监控

🧑‍💻 写在开头 点赞 收藏 学会🤣🤣🤣 前端监控主要分三个方向 前端性能(用户体验优化) 异常监控 业务指标跟 下面我来分别介绍三类指标如何获取 1)前端性能指标: …

【JAVA版】意象CRM客户关系管理系统+uniapp全开源

一.介绍 CRM意象客户关系管理系统,是一个综合性的客户管理平台,旨在帮助企业高效地管理客户信息、商机、合同以及员工业绩。系统通过首页、系统管理、工作流程、审批中心、线索管理、客户管理、商机管理、合同管理、CRM系统、数据统计和系统配置等模块&…

【Python连接数据库基础 04】Django ORM开发指南:模型设计与高效查询完全攻略

Django ORM开发指南:模型设计与高效查询完全攻略 关键词:Django ORM、模型设计、数据库查询优化、Model关系、QuerySet、数据库性能、Python Web开发、ORM最佳实践 摘要:深入解析Django ORM的核心概念和高级用法,从模型设计原则到…

项目计划缺乏风险评估和应对策略,如何完善

项目计划缺乏风险评估和应对策略可通过建立风险识别机制、实施风险定性与定量评估、制定具体应对措施、建立风险监控体系、加强风险意识培训来完善。 特别是实施风险定性与定量评估,这一环节直接决定了风险的处理优先级和资源分配。通过定性评估,我们能明…

java29

1.IO流续续集 序列化流: 上传javabean类后再修改它,会报错 自己定义版本号 方便生产版本号的设置: 版本号要在javabean写完再写 综合练习: 因为不知道写进去多少个对象,因此读的时候不确定读多少次(读一次…

时代星光推出战狼W60智能运载无人机,主要性能超市场同类产品一倍!

在刚刚结束的第九届世界无人机大会上,时代星光科技发布了其全新产品战狼W60智能运载无人机,并展示了基于战狼W60无人机平台的多种应用场景解决方案。据了解,该产品作为一款多旋翼无人机,主要性能参数均远超市场同类产品&#xff0…

Gephi中的Isometric Layout 插件使用应该用什么数据格式

格式如下: 1.导入数据,运行布局算法Isometric Layout ; 2.进入数据面板,选择节点页; 3.已经有一个新列“Computed Z-Level”出现了,但是此时还不是正确的列名,需要改名为[z]; 列…

Mac版本Android Studio配置LeetCode插件

第一步:Android Studio里面找到Settings,找到Plugins,在Marketplace里面搜索LeetCode Editor。 第二步:安装对应插件,并在Tools->LeetCode Plugin页面输入帐号和密码。 理论上,应该就可以使用了。但是&a…

大模型的分词器——算法及示例

文章目录 1. 分词的概述1.1 什么是分词?1.2 分词的重要性1.3 分词方法的演变1.4 分词器的选择 2. Byte-Pair Encoding (BPE)2.1 BPE的概述2.2 BPE的工作原理示例:BPE训练示例:BPE分词伪代码:BPE训练 2.3 BPE的优缺点2.4 BPE在模型…

用户管理页面(解决toggleRowSelection在dialog用不了的隐患,包含el-table的plus版本的组件)

新增/编辑/删除/分配角色&#xff0c;图片上传在此文章分类下另一个文章 1.重点分配角色&#xff1a; <template><!-- 客户资料 --><div class"pageBox"><elPlusTable :tableData"tableData" :tablePage"tablePage" onSi…

构建基于深度学习的人体姿态估计系统 数据预处理到模型训练、评估和部署 _如何利用人体姿态识别估计数据集_数据进行人体姿态估计研究的建议Human3.6M

构建基于深度学习的人体姿态估计系统 数据预处理到模型训练、评估和部署 如何利用人体姿态识别估计数据集_数据进行人体姿态估计研究的建议__ _人体姿态估计数据集:human3.6m w文章内容及代码仅供参考 By. subject: SubjectS1 : Videos Segments Features Depth Scanner Poses…