当前位置: 首页 > news >正文

机器学习数据预处理:数据归一化(Min-Max)超通俗全解

机器学习数据预处理:数据归一化(Min-Max)超通俗全解

数据归一化是把不同量级、不同单位的特征,统一缩放到同一尺度的核心方法,几乎所有机器学习模型训练前都会用到,本科生、研究生都必须熟练掌握。


一、什么是数据归一化?为什么一定要做?

1. 一句话理解

归一化 = 把所有特征按比例“压扁”到 [0,1] 区间,让特征对模型的影响公平。

2. 不做归一化会怎样?

举个例子:

  • 身高:150~200(数值大)
  • 体重:30~100(数值小)

模型会错误认为身高比体重重要得多,因为数值范围差距太大,导致:

  • 模型精度下降
  • 收敛速度变慢
  • 距离类算法(KNN、K-Means、SVM)完全失效

二、最常用方法:Min-Max 归一化

1. 核心公式

x_norm = (x - x_min) / (x_max - x_min)

2. 符号解释

  • x:原始数据
  • x_min:这一列特征的最小值
  • x_max:这一列特征的最大值
  • x_norm:归一化后结果(一定在0~1之间)

3. 直观计算例子

原始分数:[40, 60, 80, 90, 100]

  • min = 40
  • max = 100
  • 分母 = 100 - 40 = 60

计算:

  • 40 → (40-40)/60 =0
  • 60 → (60-40)/60 ≈0.33
  • 80 → (80-40)/60 ≈0.67
  • 90 → (90-40)/60 ≈0.83
  • 100 → (100-40)/60 =1

归一化结果:[0, 0.33, 0.67, 0.83, 1]


三、数学原理(详细推导,考试/论文必备)

1. 目标

构造线性函数:

f(x) = a·x + b

满足:

  • x = x_min → f(x) = 0
  • x = x_max → f(x) = 1

2. 求解系数

由边界条件可推出:

  • a = 1 / (x_max - x_min)
  • b = -x_min / (x_max - x_min)

3. 最终公式

f(x) = (x - x_min) / (x_max - x_min)

4. 重要性质

  • 线性变换:不改变数据相对大小与分布形状
  • 保留相对距离:不破坏数据规律
  • 范围严格 0~1:适合需要固定输入范围的模型

四、完整可运行代码(含4张可视化图)

直接复制运行,包含:计算、折线图、柱状图、映射曲线、分布对比。

importnumpyasnpimportmatplotlib.pyplotasplt# 原始数据original_scores=np.array([40,60,80,90,100])# 归一化计算min_val=np.min(original_scores)max_val=np.max(original_scores)normalized_scores=(original_scores-min_val)/(max_val-min_val)# 放大到0-100方便对比normalized_scaled=normalized_scores*100# 绘图fig,axs=plt.subplots(2,2,figsize=(16,10))fig.suptitle('Data Normalization (Min-Max) Analysis',fontsize=20)# 1. 折线图axs[0,0].plot(original_scores,'ro-',linewidth=3,markersize=10,label='Original')axs[0,0].plot(normalized_scaled,'bs--',linewidth=3,markersize=10,label='Normalized')axs[0,0].set_title('Line Chart: Original vs Normalized')axs[0,0].legend()axs[0,0].grid(True)# 2. 柱状图idx=np.arange(len(original_scores))w=0.35axs[0,1].bar(idx,original_scores,w,color='orange',label='Original')axs[0,1].bar(idx+w,normalized_scaled,w,color='purple',label='Normalized')axs[0,1].set_title('Bar Chart Comparison')axs[0,1].legend()axs[0,1].grid(True)# 3. 映射曲线axs[1,0].scatter(original_scores,normalized_scores,s=150,color='lime')x_line=np.linspace(min_val,max_val,100)y_line=(x_line-min_val)/(max_val-min_val)axs[1,0].plot(x_line,y_line,'k--',linewidth=2,label='Mapping Curve')axs[1,0].set_title('Scatter Plot: Mapping Function')axs[1,0].set_xlabel('Original')axs[1,0].set_ylabel('Normalized')axs[1,0].legend()axs[1,0].grid(True)# 4. 分布直方图axs[1,1].hist(original_scores,bins=8,alpha=0.7,color='cyan',label='Original')axs[1,1].hist(normalized_scaled,bins=8,alpha=0.7,color='magenta',label='Normalized')axs[1,1].set_title('Histogram Distribution')axs[1,1].legend()axs[1,1].grid(True)plt.tight_layout()plt.show()

五、可视化结果说明(超清晰)

  1. 折线图:归一化后趋势不变,只是尺度统一
  2. 柱状图:直观对比原始值与归一化值的差异
  3. 映射散点图:完美符合线性公式 y = kx + b
  4. 直方图:数据分布形状不变,仅范围被压缩

六、归一化 vs 标准化(最易混淆点)

方法公式输出范围异常值影响适用场景
归一化(x-min)/(max-min)[0,1]非常大固定范围、图像、KNN
标准化(x-μ)/σ无固定范围较小正态分布、梯度下降、SVM

最简单选择口诀

  • 数据有极端异常值→ 用标准化
  • 数据需要 0~1 范围→ 用归一化
  • 不确定 →优先标准化

七、哪些模型必须做归一化?

✅ 必须做(不做效果很差)

  • KNN、K-Means(基于距离)
  • SVM
  • 神经网络、梯度下降
  • 线性回归、逻辑回归

❌ 不用做(树模型)

  • 决策树、随机森林、XGBoost、LightGBM

八、总结(面试/笔记速背版)

  1. 归一化 = 统一特征尺度,消除量纲影响
  2. Min-Max 公式:(x-min)/(max-min)
  3. 结果一定落在 0~1
  4. 线性变换,保留数据分布
  5. 距离类模型必做,树模型可不做
http://www.cnnetsun.cn/news/2052672.html

相关文章:

  • 如何快速掌握图片格式转换:面向新手的Chrome扩展完整指南
  • 深度学习工程师能力评估与项目作品集构建指南
  • 终极指南:用mkcert为Ruby on Rails项目搭建零配置本地HTTPS环境
  • Kubernetes集群安全终极指南:从加密配置到证书管理深度解析
  • 突破深色皮肤检测瓶颈:MediaPipe Pose姿态追踪终极优化指南
  • 突破ZIP条目数限制:Jadx反编译工具的安全与效率平衡之道
  • AntiFraudChatBot未来发展方向:从反诈骗到通用AI助手
  • Omnipay未来蓝图:AI与区块链支付的终极融合指南
  • 别再手动调参了!用R语言dismo包跑Maxent模型,从数据清洗到未来气候预测(SSP585)一条龙搞定
  • DiffusionDet完全解析:首个扩散模型在目标检测领域的革命性突破
  • 3分钟上手Obsidian Zettelkasten模板:构建你的个人知识管理系统
  • Android 6.0+ 流量统计实战:用NetworkStatsManager API精准监控单个App的WiFi/移动数据消耗
  • 如何快速上手 LaTeX2e:10 个实用技巧让排版变得简单
  • NVIDIA Orin PVA引擎优化自动驾驶视觉计算
  • PPO-PyTorch社区贡献指南:从用户到开发者的转变
  • 终结标签与信号:镜像视界开启空间计算时代:多视角三维定位与无感感知底座技术白皮书
  • python学习笔记 | 7.2、高级特性-迭代
  • LabML最佳实践:大型项目中管理数百个实验的秘诀
  • 深入探究MybatisPlus中orderBy系列方法的动态构建与条件控制
  • Resemble Enhance:基于深度学习的专业级语音增强系统架构深度剖析
  • Keycloak Kubernetes和OpenShift部署:云原生环境下的身份管理
  • 用Windows API mciSendString在C/C++里做个简易音乐播放器(附完整源码)
  • Seaport高级功能:如何实现NFT的批量交易和组合订单
  • Windows系统优化终极指南:WinUtil一键配置工具完全教程
  • 如何用Qwen3-VL-2B做OCR?图文识别部署教程详细步骤
  • 告别‘纸面理论’:用Python+Matplotlib实战可视化平面阵列的切比雪夫与泰勒分布
  • 题解:洛谷 P7915 [CSP-S 2021] 回文
  • Qwen3-14B私有部署灾备方案:镜像备份、状态快照、跨机房容灾设计
  • 强化学习论文查找指南
  • Linux 内核参数导致连接数暴增,我用 ss + iptables 三分钟定位了 SYN Flood 元凶