线性无关消除 AI 特征中的冗余
用系数方程发现重复的特征方向,手动检验线性无关,并用 NumPy 检查特征矩阵。
模型可能收到两列看似不同、却总是同步升降的特征。如果一列恰好是另一列的倍数,模型得到的其实是同一个方向的两个名称。预测结果仍可能定义明确,但生成该结果的各个权重并不能唯一确定。
线性无关为这种冗余提供了精确检验。学完本课后,你将能够找出使向量相加为零的非零系数组合,解释这种组合为何揭示了重复方向,并用 NumPy 检查一个小型 AI 特征矩阵。
第 17 课介绍了线性组合这一加权和。第 28 课用这些组合描述受限特征。官方《机器学习数学(Mathematics for Machine Learning)》第 2.5 节用同一运算判断一组向量是否含有冗余方向。作者的配套网站说明此处链接的是当前书籍 PDF。本文的特征矩阵、演算示例、图示、代码和练习均为原创。
寻找能够抵消的非零组合
设同一向量空间中有向量 。我们要判断是否存在某些系数,使它们组合成零向量:
所有系数都为零总是可行的。真正有意义的问题是:是否还有其他系数选择也能做到?
仅仅得到零向量并不能说明问题,因为所有系数取零总会得到它。线性相关意味着存在一个非平凡组合:至少有一个系数不为零,而加权后的方向却相互抵消。于是集合中的某个向量可以用其他向量重写,说明这组向量包含重复的线性方向。
逐步推导抵消关系
取两个特征方向:
第二个向量是第一个的两倍:。选择系数 和 :
这是一条非平凡关系,因为两个系数并非都为零。它也直接给出重写方式:。移除其中任意一个向量,都不会改变线性组合所能到达的方向集合。
下面的系数搜索使用 ;在相关模式下,使用 。移动系数即可观察缩放后的向量如何相加。将第二个向量切换为 ,即可对比一个线性无关的向量对。文字结果和表格会重复绘图中的坐标,因此无需依赖颜色或形状也能查看计算结果。
- a u 的贡献
- b v 的贡献
- 和 a u + b v
| 量 | 坐标或数值 |
|---|---|
| 系数 a | +1 |
| 系数 b | -0.5 |
| 向量 u | (+1, +2) |
| 向量 v | (+2, +4) |
| a u | (+1, +2) |
| b v | (-1, -2) |
| 和 a u + b v | (0, 0) — 零向量 |
滑块只搜索 −1 到 1 之间的系数。图中出现抵消可以证明相关;有限范围的搜索本身不能证明无关。
线性无关的对照例子使定义更加具体。令 、。若 ,则
第一个坐标迫使 。将它代入第二个坐标可得 。由于只有平凡系数能成立,这一对向量线性无关。代数推导才是证明;交互网格用于探索不同系数的作用。
在模型中寻找重复的特征方向
设计矩阵以行为样本、以列为特征。假设一个含三个样本的模型接收如下两列:
这些列线性相关,因为 。对于权重为 的线性模型,预测为
只有合并权重 会影响这些预测。例如,权重 和 都使该量等于 ,因此都会产生 。预测相同,但这些数据无法唯一确定各个权重。这是特征冗余会使解释变复杂的一个具体方式。
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 最小二乘文档还介绍了通过奇异值截断判断秩,并在多个解都能使误差最小时返回最小范数解。因此,数值秩是对数据和计算作出的、基于容差的判断,并不表示两个测量特征在符号上完全相同。
最实用的快速检查直接来自定义:包含零向量的集合线性相关;非零标量倍数重复了一个方向。在 中,任意多于 个向量的集合必然线性相关,因为最多只有 个线性无关方向。向量彼此不同也仍可能线性相关,例如 与 。
对于小型精确示例,手动求解系数方程即可。对于较大的数据矩阵或小数测量值,则应检查数值秩,并说明解释所依据的容差或不确定性。找出线性无关方向后,下一课将讨论这些方向的所有线性组合能够表示什么:张成空间。
检查理解
检查理解
Question 1
在线性无关的定义中,为什么要求只有全零系数才能产生零向量?
Show the step-by-step solution
全零系数对任何输入向量都能得到零向量。线性无关表示不存在另一组非平凡系数能抵消这些向量;线性相关则表示存在这种抵消,且至少一个系数非零。
Question 2
令 u = (1, 3),v = (2, 6)。写出一条证明这对向量线性相关的非平凡系数关系。
Show the step-by-step solution
因为 ,选择系数 和 。于是 。两个系数并非都为零,因此这对向量线性相关。
Question 3
证明 p = (1, 2) 和 q = (0, 1) 线性无关。
Show the step-by-step solution
令 。按坐标展开为 。第一个坐标给出 ;再代入第二个坐标可得 。只有平凡系数对成立,这正是线性无关的条件。
Question 4
集合包含 (0, 0) 和 (1, 0),它们线性无关吗?用系数解释。
Show the step-by-step solution
它们线性相关。给 的系数取 ,给 的系数取 ,组合仍为 ,而系数对 是非平凡的。因此,含有零向量就会使整个集合线性相关。
Question 5
特征列 x₂ 是 x₁ 的两倍。哪条系数关系能证明这些列线性相关?
Show the step-by-step solution
由 可重写为 。系数 和 并非都为零,所以这是非平凡零组合,这些列线性相关。
Question 6
对于 X = [[1, 2], [2, 4], [3, 6]],它的秩是多少?这说明两列有什么关系?
Show the step-by-step solution
第二列是第一列的两倍,因此第一列提供一个线性无关方向,第二列没有增加新方向。矩阵的秩为 。等价地, 是一条非平凡系数关系。
Question 7
为什么 ℝ² 中任意三个向量必定线性相关,即使它们两两不相等?
Show the step-by-step solution
只有两个线性无关的坐标方向。三个向量的数量超过空间维数,因此至少有一个向量能写成其他向量的线性组合。线性相关不要求其中两个向量相等。
Question 8
NumPy 用容差报告矩阵秩。为什么一个几乎重复的特征可能被视为冗余,即使其数值并非另一个特征的精确倍数?
Show the step-by-step solution
浮点数据和测量噪声使严格相等的要求在许多实际检查中太苛刻。矩阵秩计算会统计超过阈值的奇异值;如果某个方向相对于所选容差足够小,矩阵就会被视为秩亏。阈值应反映数值精度,并在已知时考虑测量不确定性。