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

机器学习——标准化、归一化

‘标准化’、‘归一化’ 属于 ‘数据转换(Data Transformation)’

目标:把数据变成适合算法处理的形态。


标准化与归一化详解

1. 引言

在机器学习、数据分析和深度学习中,特征的取值范围往往差异巨大。直接使用原始数据可能导致某些特征在计算距离、梯度下降等过程中对结果产生不成比例的影响。

假设我们要用机器学习预测房价,数据集中有两个特征:

房屋面积(㎡)房龄(年)
1208
8015
2003

  • 面积的数值范围大约是 80 ~ 200

  • 房龄的数值范围大约是 3 ~ 15

如果直接把这两个特征送进一些模型,如:

  • 基于距离的算法(KNN、K-means)中,面积差 120㎡ vs 80㎡ 的差异(40)远比房龄差 8 年 vs 15 年 的差异(7)大得多,距离计算时几乎全被“面积”主导,房龄的影响被弱化。

  • 梯度下降优化中,面积的梯度变化会很大,而房龄的梯度变化很小,导致模型在训练中更关注面积特征,忽略房龄特征。

直观理解

  • 归一化:把所有特征的值压缩到固定范围(比如 0~1),比例关系保留,但绝对大小不重要。

  • 标准化:让特征围绕 0 分布,并按标准差进行缩放,适合服从正态分布的特征。

比如

  • 面积可能变成 0.2 ~ 0.9

  • 房龄可能变成 0.1 ~ 0.8
    这样,两个特征在模型计算中的“话语权”更均衡,模型能更全面地考虑不同特征的作用。

为了避免这种问题,我们需要对数据进行 特征缩放(Feature Scaling),其中最常见的两种方法就是标准化归一化


2. 标准化(Standardization)

2.1 定义

标准化是将数据的分布调整为均值为 0、标准差为 1的分布,使其符合标准正态分布 N(0,1)

2.2 公式

对于特征 x:

  • μ:特征的均值

  • σ:特征的标准差

2.3 特点

  • 数据范围不固定(可能是 -3 到 3,也可能更大)。

  • 适合假设数据服从正态分布的算法,例如线性回归、逻辑回归、SVM、KNN、PCA等。

  • 异常值较敏感,因为均值和标准差会被极端值拉动。

2.4 Python 示例

import numpy as np
from sklearn.preprocessing import StandardScaler# 模拟数据
X = np.array([[1, 200], [2, 300], [3, 400]])scaler = StandardScaler()
X_std = scaler.fit_transform(X)print("标准化后:\n", X_std)

3. 归一化(Normalization)

3.1 定义

归一化是将数据按比例压缩到固定范围(通常是 [0,1] 或 [-1,1]),保持特征之间的比例关系。

3.2 公式(Min-Max Normalization)

  • xmin:特征的最小值

  • xmax⁡:特征的最大值

3.3 特点

  • 数据范围固定,通常在 [0,1]。

  • 适合对距离敏感的算法(如 KNN、K-means、神经网络),因为它能防止大数值特征主导距离计算。

  • 异常值非常敏感,如果数据中有极端值,压缩后的大多数数据可能聚集在很小的区间。

3.4 Python 示例

import numpy as np
from sklearn.preprocessing import MinMaxScalerX = np.array([[1, 200], [2, 300], [3, 400]])scaler = MinMaxScaler(feature_range=(0, 1))
X_norm = scaler.fit_transform(X)print("归一化后:\n", X_norm)

4. 标准化 vs 归一化 对比

对比维度标准化(Standardization)归一化(Normalization)
公式
范围不固定固定([0,1]或[-1,1])
对异常值敏感度
适用算法假设数据正态分布的算法(线性回归、SVM、PCA等)基于距离或梯度的算法(KNN、K-means、神经网络等)
结果分布均值为0、标准差为1保持比例但缩放到固定范围

6. 总结与建议

  • 如果算法假设数据服从正态分布 → 用标准化

  • 如果算法基于距离计算或需要固定范围 → 用归一化

  • 如果数据中有极端值,要先处理异常值再缩放,否则缩放结果会失真。

小贴士:在实际项目中,可以先用 StandardScalerMinMaxScaler 试验,再通过验证集评估效果,选择最合适的方式。

http://www.xdnf.cn/news/1277155.html

相关文章:

  • 从零开始理解百度语音识别API的Python实现
  • nginx 反向代理传递原始域名
  • 前端开发中的常见问题与实战解决方案​
  • PostgreSQL 批量COPY导入优化参数配置
  • GC如何判断对象可以被回收?
  • SpringAI报错:com.github.victools.jsonschema.generator.AnnotationHelper
  • 《设计模式》UML类图
  • Java集合框架、Collection体系的单列集合
  • Elasticsearch QueryDSL 教程
  • Android APK 使用OpenGl 绘制三角形源码
  • Spring Boot 全局异常处理与日志监控实战
  • 智能体革命:网络安全人的角色重塑与突围指南
  • 井字游戏的强化学习
  • 复现论文《基于Retinex理论和深度学习的低照度图像增强算法研究》
  • CompletableFuture实现Excel 多个sheet页批量导出
  • 【模板】拓扑排序
  • 【嵌入式硬件实例】-555定时器PWM调光电路
  • 通过Certbot自动申请更新HTTPS网站的SSL证书
  • 字节:计算机存储单位
  • Spring Cloud系列—OpenFeign远程调用
  • 【东枫科技】FR3 可扩展测试平台,适用于 6G 研究与卫星通信,高达 1.6 GHz 的带宽
  • 【Html网页模板】炫酷科技风公司首页
  • 正确使用SQL Server中的Hint(10)—Hint简介与Hint分类及语法(1)
  • strace的常用案例
  • GPT-5与中国AI发展(DeepSeek R1视角)
  • FFmpeg实现音视频转码
  • QT的常用控件说明
  • 【从源码角度深度理解 Python 的垃圾回收机制】:第1课引用计数篇
  • C++高频知识点(二十)
  • 电脑使用“碎片整理”程序的作用