归一化、标准化
def normalize_descending_list(data):
if not data:
return []
max_val = data[0]
min_val = data[-1]
# 防止列表中所有数字都相同(导致除以零)
if max_val == min_val:
return [0.0] * len(data)
# 归一化计算
return [(x - min_val) / (max_val - min_val) for x in data]归一化(Normalization)和标准化(Standardization)是数据预处理中两个最常用的概念。虽然它们的目的都是为了消除特征之间量纲(单位)的影响,让模型收敛更快,但在具体的数学实现和适用场景上有着本质区别。
1. 归一化 (Normalization)
归一化通常是指将数据压缩到 [0, 1] 或 [-1, 1] 的特定范围内。最常见的方法是 Min-Max 归一化。
计算公式:
特点:
对原始数据的分布没有要求。
对异常值(Outliers)极其敏感。如果数据中有一个极大的异常值,那么其他正常数值会被压缩到一个非常小的区间内。
适用场景:
适用于数据范围较稳定、没有极端值的情况。
常用于图像处理(像素值 0-255)或需要计算距离的模型(如 KNN、K-Means)。
2. 标准化 (Standardization)
标准化(也叫 Z-score Normalization)是将数据转换为均值为 0,标准差为 1 的正态分布过程。
计算公式:
(其中 为均值, 为标准差)
特点:
对异常值更具鲁棒性。异常值会影响均值和方差,但不会像归一化那样把整个数据集“压扁”。
处理后的数据不限制在特定的范围内。
适用场景:
大多数机器学习算法的首选(如 SVM、逻辑回归、神经网络)。
当算法假设特征服从正态分布时,标准化是必须的。
3. 核心区别对比
| 特性 | 归一化 (Min-Max) | 标准化 (Z-Score) |
|---|---|---|
| 输出范围 | 严格限制在 [0, 1] 或 [-1, 1] | 无特定范围,通常集中在 [-3, 3] 之间 |
| 数学中心 | 不固定 | 均值为 0 |
| 异常值处理 | 极度敏感,异常值会扭曲结果 | 相对稳健,能减弱异常值的影响 |
| 数据分布 | 改变原有的分布关系 | 保持原有的分布形态,仅平移和缩放 |
4. 什么时候该选哪一个?
虽然没有绝对的定律,但你可以参考以下“经验法则”:
选标准化(Standardization): 如果你不知道该选哪个,先试标准化。它在大多数算法(如逻辑回归、SVM、深度学习)中表现更稳定。
选归一化(Normalization): 当你明确知道数据的边界(如图像像素),或者你使用的算法对特征的量程非常敏感(如 KNN 或需要计算距离权重的模型)时。
看异常值: 如果你的数据集里有很多“刺头”(异常值),请务必避开归一化。
你想针对某个具体的机器学习模型(比如线性回归或随机森林)来看看它们对预处理的要求吗?
更新日志
05f73-于b7bc3-于
