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

Python 实战:数据归一化 4 种核心方法对比 + 代码实现(机器学习必看)

在机器学习、深度学习的数据预处理中,数据归一化是绕不开的关键步骤。不同特征往往量纲不同(比如年龄 18-60、收入 1000-100000),直接训练模型会导致:

  • 梯度下降收敛慢、难以最优解
  • 距离类算法(KNN、K-Means、SVM)精度暴跌
  • 神经网络权重更新失衡

本文整理Python 中最常用的 4 种数据归一化 / 标准化方法,从原理、适用场景、代码实现、优缺点全方位对比,新手也能直接套用!

一、核心概念区分:归一化 vs 标准化

先理清两个易混淆的概念,避免用错方法:

  1. 归一化(Normalization):将数据压缩到 **[0,1][-1,1]** 区间,消除量纲影响;
  2. 标准化(Standardization):将数据转换为均值为 0,方差为 1的标准正态分布,不严格限制区间。

两者核心区别

  • 归一化:依赖数据最大 / 最小值,对异常值敏感;
  • 标准化:依赖数据均值 / 标准差,对异常值鲁棒性更强。

二、4 种常用归一化 / 标准化方法详解

本文使用numpy手动实现 +sklearn封装调用两种方式,兼顾原理理解和工程落地。

测试数据准备

先创建一组包含异常值的测试数据,方便对比效果:

python

运行

import numpy as np import pandas as pd from sklearn.preprocessing import MinMaxScaler, StandardScaler, MaxAbsScaler, RobustScaler # 生成测试数据(包含异常值:1000) data = np.array([[10, 200, 30], [20, 300, 40], [30, 400, 50], [40, 500, 60], [50, 1000, 70]]) # 第二列最后一个值为异常值 df = pd.DataFrame(data, columns=['特征1', '特征2', '特征3']) print("原始数据:") print(df)

方法 1:最小 - 最大归一化(Min-Max Scaling)→ [0,1]

原理

最基础的线性归一化方法,公式:Xnorm​=Xmax​−Xmin​X−Xmin​​

代码实现

python

运行

# 1. 手动实现 def min_max_scaler(x): return (x - np.min(x)) / (np.max(x) - np.min(x)) data_minmax = min_max_scaler(data) # 2. sklearn封装(推荐工程使用) scaler_minmax = MinMaxScaler() data_minmax_sk = scaler_minmax.fit_transform(data) print("\nMin-Max归一化([0,1]):") print(pd.DataFrame(data_minmax_sk, columns=df.columns))
核心特点

✅ 优点:简单直观,适合数据分布均匀、无明显异常值的场景;❌ 缺点:对异常值极其敏感(最大值会被异常值拉高,导致大部分数据被压缩);📌 适用场景:图像处理、固定范围的数值特征、神经网络输入层。


方法 2:绝对值最大归一化(Max-Abs Scaling)→ [-1,1]

原理

基于数据绝对值的最大值缩放,适合数据包含正负值的场景,公式:Xnorm​=∣Xmax​∣X​

代码实现

python

运行

# sklearn实现 scaler_maxabs = MaxAbsScaler() data_maxabs = scaler_maxabs.fit_transform(data) print("\nMax-Abs归一化([-1,1]):") print(pd.DataFrame(data_maxabs, columns=df.columns))
核心特点

✅ 优点:不破坏稀疏数据结构,计算高效;❌ 缺点:同样对异常值敏感;📌 适用场景:稀疏矩阵、文本分类、数据已中心化的场景。


方法 3:Z-Score 标准化(Standard Scaling)→ 均值 0 方差 1

原理

最常用的标准化方法,将数据转换为标准正态分布,公式:Xstd​=σX−μ​μ:均值,σ:标准差

代码实现

python

运行

# 1. 手动实现 def standard_scaler(x): return (x - np.mean(x)) / np.std(x) data_standard = standard_scaler(data) # 2. sklearn实现(机器学习首选) scaler_std = StandardScaler() data_std_sk = scaler_std.fit_transform(data) print("\nZ-Score标准化(均值0,方差1):") print(pd.DataFrame(data_std_sk, columns=df.columns))
核心特点

✅ 优点:对异常值鲁棒性强,不依赖极值,适合大部分机器学习算法;✅ 适用算法:逻辑回归、SVM、线性回归、PCA、神经网络;❌ 缺点:数据会偏离原始区间,不适合需要固定范围的场景;📌 适用场景:绝大多数机器学习模型(默认首选)。


方法 4:鲁棒归一化(Robust Scaling)→ 抗异常值神器

原理

针对包含大量异常值的数据设计,使用中位数(Q2)和四分位数(Q1/Q3)替代均值和极值,公式:Xrobust​=Q3−Q1X−Q2​

代码实现

python

运行

# sklearn实现 scaler_robust = RobustScaler() data_robust = scaler_robust.fit_transform(data) print("\nRobust鲁棒归一化(抗异常值):") print(pd.DataFrame(data_robust, columns=df.columns))
核心特点

✅ 优点:完全不受异常值影响,是异常值数据的最优解;✅ 优点:保留数据的离散程度,鲁棒性拉满;❌ 缺点:计算稍复杂,依赖四分位数;📌 适用场景:数据包含异常值、数据分布倾斜(非正态)、实际业务数据。


三、4 种方法全方位对比表

表格

方法公式核心输出区间对异常值敏感性适用场景推荐算法
Min-Max最值缩放[0,1]极高无异常值、均匀分布神经网络、图像处理
Max-Abs绝对值缩放[-1,1]稀疏矩阵、正负数据文本分类、稀疏特征
Z-Score均值标准差无固定区间正态分布、通用场景90% 机器学习模型
Robust四分位数缩放无固定区间极低含异常值、倾斜分布实际业务数据、KNN、K-Means

四、关键结论:怎么选?(新手直接抄作业)

  1. 数据无异常值、需要固定范围→ 选Min-Max 归一化
  2. 数据是稀疏矩阵、包含正负值→ 选Max-Abs 归一化
  3. 通用机器学习、数据正态分布→ 选Z-Score 标准化(默认首选)
  4. 数据有异常值、实际业务数据→ 选Robust 鲁棒归一化

五、避坑指南(工程必备)

  1. 先拆分训练集 / 测试集,再归一化绝对不能用测试集的极值 / 均值做归一化,会导致数据泄露,模型上线必崩!

    python

    运行

    # 正确写法 from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(data, [0,1,0,1,0], test_size=0.2) scaler = StandardScaler() X_train_std = scaler.fit_transform(X_train) # 仅用训练集拟合 X_test_std = scaler.transform(X_test) # 测试集直接用训练集的参数
  2. 树模型不需要归一化决策树、随机森林、XGBoost 等基于规则的模型,对量纲不敏感,无需归一化。

  3. 归一化不改变数据分布只是缩放数据,不会把非正态分布转为正态分布。


总结

数据归一化没有绝对的「最优解」,只有最适合数据场景的方法:

  • 新手入门优先用Z-Score 标准化,适配绝大多数模型;
  • 实际业务数据必选Robust 归一化,解决异常值痛点;
  • 固定范围需求用Min-Max,稀疏数据用Max-Abs

本文从原理到代码、从场景到避坑全覆盖,建议收藏备用!下次做数据预处理,直接对照选择即可。

http://www.jsqmd.com/news/583325/

相关文章:

  • BililiveRecorder全场景应用指南:从入门到精通的直播内容捕获方案
  • Javase(三)三大特性之封装
  • java答题pk小程序源码核心功能
  • AI-现金流-将-ChatGPT-变成您的-24-7-赚钱机器-2025-版-
  • 3D卷积和2D卷积区分-高光谱图像为例
  • 用了大半年的免费云服务器,分享真实体验
  • 看这家美国顶级新闻媒体如何用 Splashtop 实现效率与安全双飞跃
  • 有人说:中文只适合中国人学,因为前提要有个聪明的脑子!那么,中国人学英文,辅助用「干词」那简直就是聪明的脑子配上了高效的工具,原地学会!
  • 编译系统概述
  • 人在哪数据就在哪!两步打造私人高速通道,4K原片/工作文件随点随看
  • x64汇编:内存工作的基本原理
  • AI-现金流指南-最大化利润的-ChatGPT-货币化
  • 运动AI市场2026预测:亚太领跑、传感器国产化与5G+边缘计算新机遇
  • 开篇:数据处理绕不开的合并与拼接
  • Autovisor:智能优化在线课程学习效率的自动化解决方案
  • 2025届最火的降AI率平台推荐
  • 基于PLC的6层3部电梯 12000+字,纯手写的,西门子S7-1200PLC,文章里面的图纸...
  • ChatGPT-AI-大师终极指南
  • 基于单片机的全自动咖啡机控制系统设计
  • UE5-MCP终极指南:用AI魔法让游戏开发变得像聊天一样简单
  • 2026届毕业生推荐的十大降AI率工具横评
  • 团队技术专家的技术设计模版,真心好用!
  • 从零开始掌握小红书数据采集:xhs库的5大实战应用场景
  • 单片机代码版本管理工具横向评测与应用
  • 如何0失败部署ChemCrow?从环境配置到功能落地的全景指南
  • 基于机器学习提升烟雾探测器预测精度:告别误报,守护安全
  • 2025最权威的十大降重复率神器实际效果
  • 山东境内企业拓客推荐:当下获客越来越难,这几家平台值得参考
  • 解决方案:OpenRPA如何破解企业流程自动化成本与效率的双重困境
  • openclaw钉钉机器人团队