趋近智
表示向量并进行加法和标量乘法等基本运算是常见的。但是,经常需要一种方法来测量向量的“大小”或“长度”。考虑一个简单的向量,例如 。从几何角度看,这表示一个从原点 (0,0) 开始,在二维平面上终止于点 (3,4) 的箭头。这个箭头有多长?可以使用勾股定理:。这种直观的长度想法通过范数得到正式规定。
范数是一个函数,它为向量空间中的每个向量指定一个严格正的长度或大小,零向量除外,零向量的长度为零。测量长度的方法不止一种。我们将查看机器学习中最常用的两种范数: 范数和 范数。
测量向量长度最常用的方法是 范数,也称为欧几里得范数。这与我们对欧几里得空间中距离(直线距离)的直观理解完全一致。
对于一个有 个元素的向量 ,其 范数计算为向量元素平方和的平方根:
请注意,对于我们的二维例子 ,此公式得出 ,与勾股定理相符。
在 NumPy 中,可以使用 np.linalg.norm() 函数计算 范数。默认情况下,此函数计算 范数。
import numpy as np
# 定义一个向量
v = np.array([3, 4])
# 计算 L2 范数
l2_norm = np.linalg.norm(v)
print(f"向量: {v}")
print(f"L2 范数(欧几里得长度): {l2_norm}")
# 另一个例子(三维向量)
w = np.array([1, 2, -2])
l2_norm_w = np.linalg.norm(w)
# 计算: sqrt(1^2 + 2^2 + (-2)^2) = sqrt(1 + 4 + 4) = sqrt(9) = 3
print(f"\n向量: {w}")
print(f"L2 范数: {l2_norm_w}")
输出将是:
向量: [3 4]
L2 范数(欧几里得长度): 5.0
向量: [ 1 2 -2]
L2 范数: 3.0
范数在机器学习中应用广泛,例如在正则化技术(如岭回归)中,用于惩罚大的系数,以及用于计算距离度量。
测量向量大小的另一种有用方法是 范数,有时称为曼哈顿范数或出租车范数。 范数不是将元素平方,而是将元素的绝对值求和。
对于相同的向量 , 范数计算为:
为什么叫“曼哈顿范数”?想象你在一个像曼哈顿一样街道呈网格状的城市。从 A 点到 B 点,你不能沿直线行进(就像 范数测量的那样)。你必须沿着街道(水平和垂直方向)行进。 范数表示沿网格轴线行进的总距离。
对于我们的例子向量 , 范数是 。
在 NumPy 中计算 范数时,使用相同的 np.linalg.norm() 函数,但需要指定 ord=1 的 order 参数。
import numpy as np
# 定义一个向量
v = np.array([3, 4])
# 计算 L1 范数
l1_norm = np.linalg.norm(v, ord=1)
print(f"向量: {v}")
print(f"L1 范数(曼哈顿长度): {l1_norm}")
# 另一个例子(带负值)
w = np.array([1, -2, -2])
l1_norm_w = np.linalg.norm(w, ord=1)
# 计算: |1| + |-2| + |-2| = 1 + 2 + 2 = 5
print(f"\n向量: {w}")
print(f"L1 范数: {l1_norm_w}")
输出将是:
向量: [3 4]
L1 范数(曼哈顿长度): 7.0
向量: [ 1 -2 -2]
L1 范数: 5.0
范数在机器学习中也很重要。当在优化中(例如 Lasso 回归中的特征选择)使用时,它倾向于产生稀疏结果(这意味着许多值为零)。
范数和 范数之间的差异在二维空间中通过几何方式最容易观察。 范数是直接的“直线”距离,而 范数是沿网格线行进的距离。
可视化比较了从原点 (0,0) 到向量 [3, 4] 的 L1(曼哈顿,虚线橙色)和 L2(欧几里得,实线蓝色)路径。L2 范数表示直接距离 (5.0),而 L1 范数表示沿坐标轴行进的距离 (3 + 4 = 7.0)。
理解范数能为我们提供一个测量向量大小的基本工具,这个工具在处理数据和机器学习算法时经常使用。尽管 和 是最常见的,但也存在其他范数(如 范数,一种推广形式,或 范数,最大绝对值分量),但 和 提供了坚实的支撑。
这部分内容有帮助吗?
numpy.linalg.norm 函数的官方文档,展示了如何在 Python 中计算 L1 和 L2 范数。© 2026 ApX Machine Learning用心打造