表示向量并进行加法和标量乘法等基本运算是常见的。但是,经常需要一种方法来测量向量的“大小”或“长度”。考虑一个简单的向量,例如 $\mathbf{v} = [3, 4]$。从几何角度看,这表示一个从原点 (0,0) 开始,在二维平面上终止于点 (3,4) 的箭头。这个箭头有多长?可以使用勾股定理:$\sqrt{3^2 + 4^2} = \sqrt{9 + 16} = \sqrt{25} = 5$。这种直观的长度想法通过范数得到正式规定。范数是一个函数,它为向量空间中的每个向量指定一个严格正的长度或大小,零向量除外,零向量的长度为零。测量长度的方法不止一种。我们将查看机器学习中最常用的两种范数:$L_2$ 范数和 $L_1$ 范数。L2 范数(欧几里得范数)测量向量长度最常用的方法是 $L_2$ 范数,也称为欧几里得范数。这与我们对欧几里得空间中距离(直线距离)的直观理解完全一致。对于一个有 $n$ 个元素的向量 $\mathbf{v} = [v_1, v_2, \dots, v_n]$,其 $L_2$ 范数计算为向量元素平方和的平方根:$$ | \mathbf{v} |2 = \sqrt{v_1^2 + v_2^2 + \dots + v_n^2} = \sqrt{\sum{i=1}^{n} v_i^2} $$请注意,对于我们的二维例子 $\mathbf{v} = [3, 4]$,此公式得出 $\sqrt{3^2 + 4^2} = 5$,与勾股定理相符。在 NumPy 中,可以使用 np.linalg.norm() 函数计算 $L_2$ 范数。默认情况下,此函数计算 $L_2$ 范数。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$L_2$ 范数在机器学习中应用广泛,例如在正则化技术(如岭回归)中,用于惩罚大的系数,以及用于计算距离度量。L1 范数(曼哈顿范数)测量向量大小的另一种有用方法是 $L_1$ 范数,有时称为曼哈顿范数或出租车范数。$L_1$ 范数不是将元素平方,而是将元素的绝对值求和。对于相同的向量 $\mathbf{v} = [v_1, v_2, \dots, v_n]$,$L_1$ 范数计算为:$$ | \mathbf{v} |1 = |v_1| + |v_2| + \dots + |v_n| = \sum{i=1}^{n} |v_i| $$为什么叫“曼哈顿范数”?想象你在一个像曼哈顿一样街道呈网格状的城市。从 A 点到 B 点,你不能沿直线行进(就像 $L_2$ 范数测量的那样)。你必须沿着街道(水平和垂直方向)行进。$L_1$ 范数表示沿网格轴线行进的总距离。对于我们的例子向量 $\mathbf{v} = [3, 4]$,$L_1$ 范数是 $|3| + |4| = 3 + 4 = 7$。在 NumPy 中计算 $L_1$ 范数时,使用相同的 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$L_1$ 范数在机器学习中也很重要。当在优化中(例如 Lasso 回归中的特征选择)使用时,它倾向于产生稀疏结果(这意味着许多值为零)。L1 和 L2 范数的可视化$L_1$ 范数和 $L_2$ 范数之间的差异在二维空间中通过几何方式最容易观察。$L_2$ 范数是直接的“直线”距离,而 $L_1$ 范数是沿网格线行进的距离。{"layout": {"xaxis": {"range": [-1, 5], "title": "x 轴", "zeroline": false}, "yaxis": {"range": [-1, 6], "title": "y 轴", "scaleanchor": "x", "scaleratio": 1}, "title": "向量 [3, 4] 的 L1 与 L2 范数比较", "showlegend": true, "margin": {"l": 40, "r": 20, "t": 60, "b": 40}, "legend": {"yanchor": "top", "y": 0.99, "xanchor": "left", "x": 0.01}}, "data": [{"type": "scatter", "x": [3], "y": [4], "mode": "markers", "name": "向量终点 [3, 4]", "marker": {"color": "#d6336c", "size": 10}}, {"type": "scatter", "x": [0, 3], "y": [0, 4], "mode": "lines", "name": "L2 路径 (距离 = 5.0)", "line": {"color": "#4263eb", "width": 2}}, {"type": "scatter", "x": [0, 3, 3], "y": [0, 0, 4], "mode": "lines", "name": "L1 路径 (距离 = 7.0)", "line": {"color": "#f76707", "dash": "dash", "width": 2}}, {"type": "scatter", "x": [0], "y": [0], "mode": "markers", "name": "原点", "marker": {"color": "#495057", "size": 8}}]}可视化比较了从原点 (0,0) 到向量 [3, 4] 的 L1(曼哈顿,虚线橙色)和 L2(欧几里得,实线蓝色)路径。L2 范数表示直接距离 (5.0),而 L1 范数表示沿坐标轴行进的距离 (3 + 4 = 7.0)。理解范数能为我们提供一个测量向量大小的基本工具,这个工具在处理数据和机器学习算法时经常使用。尽管 $L_1$ 和 $L_2$ 是最常见的,但也存在其他范数(如 $L_p$ 范数,一种推广形式,或 $L_\infty$ 范数,最大绝对值分量),但 $L_1$ 和 $L_2$ 提供了坚实的支撑。