归一化观测值(Normalizing Observations)
1. 引言
在机器学习和数据处理领域,特征的归一化(Normalization)是一项至关重要的预处理步骤。不同特征的取值范围可能差异很大,如果直接使用未经归一化的数据进行训练,可能会导致模型学习效果较差,收敛速度慢,甚至无法收敛。因此,归一化技术被广泛应用于各种机器学习算法中,尤其是在梯度下降优化、神经网络和支持向量机等模型中。
本篇文章将详细介绍 归一化观测值(Normalizing Observations) 的概念,重点讲解 L1 范数归一化 和 L2 范数归一化,并给出数学公式、直观解释及 Python 代码示例。
2. 为什么需要归一化?
在数据分析和机器学习任务中,我们通常会遇到以下问题:
-
不同特征的尺度差异过大
例如,在房价预测问题中,房屋面积的取值范围可能是 50 到 500 平方米,而房龄可能是 1 到 100 年。由于数值大小不同,模型可能会更关注数值较大的特征,而忽略数值较小的特征,从而导致偏差。 -
加速梯度下降收敛
在使用梯度下降法进行优化时,如果特征值的尺度不一致,损失函数的等高线可能是一个“狭长椭圆”,导致梯度下降的步长难以调整,从而减慢训练速度。归一化后的特征使等高线更加接近圆形,有助于梯度下降更快地收敛。 -
提高模型的数值稳定性
在神经网络中,未经归一化的数据可能会导致前向传播时某些神经元输出过大,影响激活函数的计算,使得梯度消失或梯度爆炸,从而影响模型训练。
3. 归一化的定义
归一化的本质是 调整每个观测值的特征尺度,使其具有单位范数,即使得特征向量的模长为 1。
数学上,我们可以使用不同的范数(Norm)来进行归一化。最常见的两种范数是:
-
L1 范数归一化(Manhattan Norm)
-
L2 范数归一化(Euclidean Norm)
4. L2 范数归一化(Euclidean Normalization)
L2 范数(欧几里得范数)定义如下:
其中:
-
是一个 n 维特征向量。
-
L2 范数是该向量在欧几里得空间中的长度(即欧几里得距离)。
L2 归一化公式:
直观理解:
-
L2 归一化会将向量的模长调整为 1,同时保持原有的方向不变。
-
它可以用于确保特征向量的尺度一致,适用于距离度量型的机器学习算法,如 KNN(K 近邻算法)、SVM(支持向量机)等。
Python 实现(L2 归一化):
import numpy as np
# 原始特征向量
x = np.array([3, 4])
# 计算 L2 范数
l2_norm = np.linalg.norm(x, ord=2)
# 进行归一化
x_normalized = x / l2_norm
print("原始向量:", x)
print("L2 归一化后:", x_normalized)
输出:
原始向量: [3 4]
L2 归一化后: [0.6 0.8]
在此示例中,(3,4) 向量的 L2 范数为 5,归一化后变为 (0.6, 0.8),长度调整为 1。
5. L1 范数归一化(Manhattan Normalization)
L1 范数(曼哈顿范数)定义如下:
L1 归一化公式:
直观理解:
-
L1 归一化确保所有特征值的绝对值之和为 1。
-
适用于稀疏特征的情况,如文本数据表示(例如 TF-IDF 归一化)。
-
在某些应用场景(如 Lasso 回归)中,L1 归一化更有利于特征选择,因为它鼓励稀疏解。
Python 实现(L1 归一化):
# 计算 L1 范数
import numpy as np
from linalg import x
l1_norm = np.linalg.norm(x, ord=1)
# 进行归一化
x_normalized = x / l1_norm
print("L1 归一化后:", x_normalized)
输出:
L2 范数 of x: 5.0
L1 范数 of x: 7.0
x 和 y 的内积: 11
L1 归一化后: [0.42857143 0.57142857]
6. L1 与 L2 归一化的对比
归一化方法 | 公式 | 适用场景 |
---|---|---|
L1 归一化 | 适用于文本数据、稀疏特征、Lasso 回归 | |
L2 归一化 | 适用于欧几里得距离度量、KNN、SVM |
一般来说:
-
L1 归一化 更适合于高维稀疏特征,如文本分类任务。
-
L2 归一化 适用于数据聚类、回归分析、KNN 等任务。
7. 总结
在数据预处理中,归一化(Normalization) 是一个重要的步骤,可以提高机器学习模型的性能和训练速度。
-
L1 归一化 适用于文本数据和稀疏特征,有助于特征选择。
-
L2 归一化 适用于欧几里得空间,能让梯度下降更稳定,提高模型收敛速度。
在实际应用中,应根据具体任务选择合适的归一化方法,以优化模型的效果!