趋近智
尽管我们常把向量看作空间中指向箭头的形式,但一个核心问题是:“这个箭头有多长?”这种“长度”或“大小”是向量的一个基本属性,在线性代数中,我们使用一个称为范数的函数来度量它。范数接收一个向量作为输入,并返回一个表示其大小的单一非负数。
理解范数之所以有帮助,是因为它们是许多机器学习应用的根本,从度量模型预测中的误差到正则化模型以防止过拟合。两种最常见的向量范数是L2范数和L1范数。
L2范数是大多数人直观上所认为的“距离”。它计算向量从原点到其终点的直线长度。你可能从几何学中记得这是勾股定理。对于一个二维向量 v = [x, y],其L2范数是 x2+y2。这个思想可以扩展到任意维数。
向量 v 具有 n 个分量时的L2范数公式为:
∣∣v∣∣2=v12+v22+⋯+vn2双竖线 ∣∣⋅∣∣ 是范数的标准记法,下标2表示这是L2范数。由于它非常常见,下标常被省略,所以如果你看到 ∣∣v∣∣,它通常指代L2范数。
让我们以向量 v=[3,4] 为例。它的L2范数是:
∣∣v∣∣2=32+42=9+16=25=5这表示向量的长度为5个单位。从几何上看,它构成了一个边长分别为3和4的直角三角形的斜边。
向量 [3,4] 的L2范数是从原点出发的直线距离,即5。
一个有趣的性质是L2范数与点积直接相关。一个向量的平方L2范数等于它与自身的点积: ∣∣v∣∣22=v⋅v。
L1范数提供了一种不同的度量向量长度的方式。它不是度量直接的“直线距离”,而是将每个分量的绝对值相加。它常被称为曼哈顿范数或出租车距离。想象你身处一个拥有网格状街道布局的城市。你无法穿过建筑物(对角线移动);你必须沿着街道(坐标轴)移动。
向量 v 的L1范数公式为:
∣∣v∣∣1=∣v1∣+∣v2∣+⋯+∣vn∣=i=1∑n∣vi∣让我们使用相同的向量 v=[3,4]。它的L1范数计算如下:
∣∣v∣∣1=∣3∣+∣4∣=7从几何上看,这是你只沿着x轴然后沿着y轴移动,从原点到达点 (3,4) 所走的总距离。
L1范数度量沿着坐标轴的路径。对于向量 [3,4],L1距离是7,而L2路径是5。
你可能想知道为什么我们需要不止一种方式来度量距离。在机器学习中,不同的范数具有不同的性质,使它们适用于特定任务。
L2范数: 这是最常用于度量误差的范数。例如,在线性回归中,模型通常通过最小化误差向量(预测值与实际值之间的差值)的L2范数来训练。这被称为最小化“平方误差和”。L2范数也用于一种称为岭回归的正则化方法,该方法会惩罚大的模型权重,鼓励权重值小且分散的解。
L1范数: L1范数也用于度量误差和进行正则化。一种称为Lasso回归的正则化方法使用L1范数来惩罚权重。L1范数有一个独特的性质:它倾向于产生稀疏解,这意味着它促使许多模型权重变为精确的零。这通过告知你哪些特征对预测没有影响,从而有效地执行特征选择。
正如你所预料的,NumPy使用 numpy.linalg.norm() 函数提供了一种简单高效的方法来计算向量范数。此函数默认计算L2范数,但你可以使用 ord 参数指定其他范数。
让我们用一个新向量 v=[−5,12] 来实际操作。
首先,计算L2范数: ∣∣v∣∣2=(−5)2+122=25+144=169=13
接下来,计算L1范数: ∣∣v∣∣1=∣−5∣+∣12∣=5+12=17
现在,让我们用NumPy验证这些结果。
import numpy as np
# 创建我们的示例向量
v = np.array([-5, 12])
# 计算L2范数(默认)
l2_norm = np.linalg.norm(v)
# 通过设置 ord=1 计算L1范数
l1_norm = np.linalg.norm(v, ord=1)
print(f"向量: {v}")
print(f"L2 范数 (欧几里得): {l2_norm}")
print(f"L1 范数 (曼哈顿): {l1_norm}")
输出:
Vector: [-5 12]
L2 Norm (Euclidean): 13.0
L1 Norm (Manhattan): 17.0
NumPy的结果与我们的手动计算完全符合。能够计算向量的“大小”是你在使用更复杂的机器学习算法时将经常用到的一项核心能力。
这部分内容有帮助吗?
linalg.norm函数的用法,包括计算各种向量和矩阵范数的详细信息。© 2026 ApX Machine Learning用心打造