AI 数学课程 · 第 29 课,共 180

线性无关消除 AI 特征中的冗余

用系数方程发现重复的特征方向,手动检验线性无关,并用 NumPy 检查特征矩阵。

分享这篇文章

模型可能收到两列看似不同、却总是同步升降的特征。如果一列恰好是另一列的倍数,模型得到的其实是同一个方向的两个名称。预测结果仍可能定义明确,但生成该结果的各个权重并不能唯一确定。

线性无关为这种冗余提供了精确检验。学完本课后,你将能够找出使向量相加为零的非零系数组合,解释这种组合为何揭示了重复方向,并用 NumPy 检查一个小型 AI 特征矩阵。

第 17 课介绍了线性组合这一加权和。第 28 课用这些组合描述受限特征。官方《机器学习数学(Mathematics for Machine Learning)》第 2.5 节用同一运算判断一组向量是否含有冗余方向。作者的配套网站说明此处链接的是当前书籍 PDF。本文的特征矩阵、演算示例、图示、代码和练习均为原创。

寻找能够抵消的非零组合

设同一向量空间中有向量 x1,…,xk\boldsymbol{x}_1,\ldots,\boldsymbol{x}_k。我们要判断是否存在某些系数,使它们组合成零向量:

λ1x1+⋯+λkxk=0\lambda_1\boldsymbol{x}_1+\cdots+\lambda_k\boldsymbol{x}_k=\boldsymbol{0}

所有系数都为零总是可行的。真正有意义的问题是:是否还有其他系数选择也能做到?

仅仅得到零向量并不能说明问题,因为所有系数取零总会得到它。线性相关意味着存在一个非平凡组合:至少有一个系数不为零,而加权后的方向却相互抵消。于是集合中的某个向量可以用其他向量重写,说明这组向量包含重复的线性方向。

逐步推导抵消关系

取两个特征方向:

u=[12],v=[24]。\boldsymbol{u}= \begin{bmatrix}1\\2\end{bmatrix}, \qquad \boldsymbol{v}= \begin{bmatrix}2\\4\end{bmatrix}。

第二个向量是第一个的两倍:v=2u\boldsymbol{v}=2\boldsymbol{u}。选择系数 22 和 −1-1:

2u−v=2[12]−[24]=[2−24−4]=[00]。2\boldsymbol{u}-\boldsymbol{v} =2\begin{bmatrix}1\\2\end{bmatrix} -\begin{bmatrix}2\\4\end{bmatrix} =\begin{bmatrix}2-2\\4-4\end{bmatrix} =\begin{bmatrix}0\\0\end{bmatrix}。

这是一条非平凡关系,因为两个系数并非都为零。它也直接给出重写方式:v=2u\boldsymbol{v}=2\boldsymbol{u}。移除其中任意一个向量,都不会改变线性组合所能到达的方向集合。

下面的系数搜索使用 u=(1,2)\boldsymbol{u}=(1,2);在相关模式下,使用 v=(2,4)\boldsymbol{v}=(2,4)。移动系数即可观察缩放后的向量如何相加。将第二个向量切换为 (0,1)(0,1),即可对比一个线性无关的向量对。文字结果和表格会重复绘图中的坐标,因此无需依赖颜色或形状也能查看计算结果。

线性无关的对照例子使定义更加具体。令 p=(1,2)\boldsymbol{p}=(1,2)、q=(0,1)\boldsymbol{q}=(0,1)。若 ap+bq=0a\boldsymbol{p}+b\boldsymbol{q}=\boldsymbol{0},则

a[12]+b[01]=[a2a+b]=[00]。a\begin{bmatrix}1\\2\end{bmatrix} +b\begin{bmatrix}0\\1\end{bmatrix} =\begin{bmatrix}a\\2a+b\end{bmatrix} =\begin{bmatrix}0\\0\end{bmatrix}。

第一个坐标迫使 a=0a=0。将它代入第二个坐标可得 b=0b=0。由于只有平凡系数能成立,这一对向量线性无关。代数推导才是证明;交互网格用于探索不同系数的作用。

在模型中寻找重复的特征方向

设计矩阵以行为样本、以列为特征。假设一个含三个样本的模型接收如下两列:

x1=[123],x2=[246]=2x1,X=[122436]。\boldsymbol{x}_1= \begin{bmatrix}1\\2\\3\end{bmatrix}, \qquad \boldsymbol{x}_2= \begin{bmatrix}2\\4\\6\end{bmatrix} =2\boldsymbol{x}_1, \qquad X= \begin{bmatrix} 1&2\\ 2&4\\ 3&6 \end{bmatrix}。

这些列线性相关,因为 −2x1+x2=0-2\boldsymbol{x}_1+\boldsymbol{x}_2=\boldsymbol{0}。对于权重为 w1,w2w_1,w_2 的线性模型,预测为

X[w1w2]=x1w1+x2w2=x1(w1+2w2)。X\begin{bmatrix}w_1\\w_2\end{bmatrix} =\boldsymbol{x}_1w_1+\boldsymbol{x}_2w_2 =\boldsymbol{x}_1(w_1+2w_2)。

只有合并权重 w1+2w2w_1+2w_2 会影响这些预测。例如,权重 (1,0)(1,0) 和 (−1,1)(-1,1) 都使该量等于 11,因此都会产生 (1,2,3)T(1,2,3)^\mathsf{T}。预测相同,但这些数据无法唯一确定各个权重。这是特征冗余会使解释变复杂的一个具体方式。

NumPy 的 matrix_rank 会报告超过其容差的奇异值数量,因此可用于实际检查浮点矩阵的秩:

import numpy as np

X = np.array([[1., 2.],
              [2., 4.],
              [3., 6.]])

print(X @ np.array([-2., 1.]))  # [0. 0. 0.]
print(np.linalg.matrix_rank(X)) # 1

第一行检查给出的关系,第二行则报告一个线性无关的列方向。NumPy matrix_rank 文档说明,该计算使用奇异值和容差。浮点舍入可能让理论上为零的奇异值出现极小的非零数,因此软件会应用阈值。

如果测得的两列只是近似倍数而非严格倍数,数学检验和数值秩判断都需要谨慎。NumPy 指出,默认容差可能将足够接近的列视为秩亏;测量不确定性也可能意味着应采用不同阈值。对于最小二乘拟合,NumPy 最小二乘文档还介绍了通过奇异值截断判断秩,并在多个解都能使误差最小时返回最小范数解。因此,数值秩是对数据和计算作出的、基于容差的判断,并不表示两个测量特征在符号上完全相同。

最实用的快速检查直接来自定义:包含零向量的集合线性相关;非零标量倍数重复了一个方向。在 Rd\mathbb{R}^d 中,任意多于 dd 个向量的集合必然线性相关,因为最多只有 dd 个线性无关方向。向量彼此不同也仍可能线性相关,例如 (1,2)(1,2) 与 (2,4)(2,4)。

对于小型精确示例,手动求解系数方程即可。对于较大的数据矩阵或小数测量值,则应检查数值秩,并说明解释所依据的容差或不确定性。找出线性无关方向后,下一课将讨论这些方向的所有线性组合能够表示什么:张成空间。

检查理解

检查理解

Question 1

在线性无关的定义中,为什么要求只有全零系数才能产生零向量?

Show the step-by-step solution

全零系数对任何输入向量都能得到零向量。线性无关表示不存在另一组非平凡系数能抵消这些向量;线性相关则表示存在这种抵消,且至少一个系数非零。

Question 2

令 u = (1, 3),v = (2, 6)。写出一条证明这对向量线性相关的非平凡系数关系。

Show the step-by-step solution

因为 v=2uv=2u,选择系数 22 和 −1-1。于是 2u−v=2(1,3)−(2,6)=(2,6)−(2,6)=(0,0)2u-v=2(1,3)-(2,6)=(2,6)-(2,6)=(0,0)。两个系数并非都为零,因此这对向量线性相关。

Question 3

证明 p = (1, 2) 和 q = (0, 1) 线性无关。

Show the step-by-step solution

令 ap+bq=(0,0)ap+bq=(0,0)。按坐标展开为 (a,2a+b)=(0,0)(a,2a+b)=(0,0)。第一个坐标给出 a=0a=0;再代入第二个坐标可得 b=0b=0。只有平凡系数对成立,这正是线性无关的条件。

Question 4

集合包含 (0, 0) 和 (1, 0),它们线性无关吗?用系数解释。

Show the step-by-step solution

它们线性相关。给 (0,0)(0,0) 的系数取 11,给 (1,0)(1,0) 的系数取 00,组合仍为 (0,0)(0,0),而系数对 (1,0)(1,0) 是非平凡的。因此,含有零向量就会使整个集合线性相关。

Question 5

特征列 x₂ 是 x₁ 的两倍。哪条系数关系能证明这些列线性相关?

Show the step-by-step solution

由 x2=2x1x_2=2x_1 可重写为 −2x1+x2=0-2x_1+x_2=0。系数 −2-2 和 11 并非都为零,所以这是非平凡零组合,这些列线性相关。

Question 6

对于 X = [[1, 2], [2, 4], [3, 6]],它的秩是多少?这说明两列有什么关系?

Show the step-by-step solution

第二列是第一列的两倍,因此第一列提供一个线性无关方向,第二列没有增加新方向。矩阵的秩为 11。等价地,X(−2,1)T=(0,0,0)TX(-2,1)^\mathsf{T}=(0,0,0)^\mathsf{T} 是一条非平凡系数关系。

Question 7

为什么 ℝ² 中任意三个向量必定线性相关,即使它们两两不相等?

Show the step-by-step solution

R2\mathbb{R}^2 只有两个线性无关的坐标方向。三个向量的数量超过空间维数,因此至少有一个向量能写成其他向量的线性组合。线性相关不要求其中两个向量相等。

Question 8

NumPy 用容差报告矩阵秩。为什么一个几乎重复的特征可能被视为冗余,即使其数值并非另一个特征的精确倍数?

Show the step-by-step solution

浮点数据和测量噪声使严格相等的要求在许多实际检查中太苛刻。矩阵秩计算会统计超过阈值的奇异值;如果某个方向相对于所选容差足够小,矩阵就会被视为秩亏。阈值应反映数值精度,并在已知时考虑测量不确定性。

资料来源

  1. Mathematics for Machine Learning companion website
  2. Mathematics for Machine Learning book PDF
  3. NumPy documentation: numpy.linalg.matrix_rank
  4. NumPy documentation: numpy.linalg.lstsq