当前位置: 首页 > 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.dtcms.com/a/324944.html

相关文章:

  • Spring Boot 事务详解:原理与实操指南
  • AQS(AbstractQueuedSynchronizer)底层源码实现与设计思想
  • 第三章-提示词:从0到1,提示词实训全攻略,解锁大语言模型无限潜能(14/36)
  • MyBatis Mapper核心组件协作关系深度解析
  • Java条件判断与用户交互实战案例
  • 【经典算法】二叉树最小深度详解:递归解法与可视化分析
  • 深入解析C#并行编程:从并行循环到异步编程模式
  • PyCATIA深度解析:基于装配截面自动化创建参考几何平面群的专业方案
  • 锂电生产设备健康管理:基于预测性维护的智能化解决方案​
  • 【github.io静态网页 怎么使用 github.io 搭建一个简单的网页?】
  • Python与MySQL数据库交互实践:自动化数据插入系统
  • GPU版的Pytorch安装(Win11)
  • SpringBoot项目自定义静态资源映射规则
  • 【嵌入式】Linux的常用操作命令 (1)
  • SAP 121移动类型的说明
  • C野指针的概念与应对(源头、阻隔、定位)
  • STM32定时器与延时系统完整笔记
  • 【C#补全计划】万类之父中的方法
  • 使用单调栈解决力扣第42题--接雨水
  • 亚麻云之静态资源管家——S3存储服务实战
  • SSH远程连接TRAE时显示权限被拒绝检查方案
  • 游泳学习 — 蛙泳
  • 变量详解:创建初始化与内存管理
  • go加速配置(下载第三方库)
  • go语言运算符
  • Java变量的声明规则与Scanner的应用
  • 算法训练营day44 动态规划⑪ 1143.最长公共子序列、1035.不相交的线、53. 最大子序和、392.判断子序列
  • BGP实验
  • (三)全栈(部署)
  • 数学建模——回归分析