两个观测,一个参数对:面向 AI 的方程组
将方程组看作同时成立的约束,分类两条直线的交点,并从两个观测中恢复仿射模型的权重和偏置。
一个微小的预测规则含有两个未知参数:
第一个观测表明,输入 产生了目标 。这并不能分别揭示权重 或偏置 ,而是给出一个约束 ,其参数对构成一整条直线。第二个观测 给出了另一条直线 。
两条直线上只有一个共同点:。在这个点上,同一个模型同时拟合两行数据。 这个共同点正是线性方程组的核心:每个方程施加一个约束,而解必须同时通过所有约束。
学完本课后,你将能够把方程组理解为同时成立的约束,用代入或相减法求解二元方程组, 将两条直线分类为相交、平行或重合,并从两个观测中恢复两个精确的模型参数。
学习成果: 将方程组理解为同时成立的约束,并分类其交点。
本课承接第 11 课:面向 AI 的线性方程, 其中一个方程变成一条几何直线,并用代入检验点是否属于该直线。官方 Mathematics for Machine Learning 配套网站 将线性方程组 放在线性代数的开头,其第 2.1 节 将同时 成立的解与几何交点联系起来。下面的参数恢复场景、推导、代码、视觉组件和练习题均为原创。
一个解必须通过两项真值检验
考虑关于同一组实数未知量 和 的两个线性方程:
固定实数 和 乘在权重上;固定实数 和 是所要求的输出。 有序对 是未知的参数设定。
“同时”一词可以避免常见错误。数对 满足 ,但不满足第二个方程,因为 。数对 满足 ,但不满足第一个方程,因为 。 每个数对只适合一行;都不满足整个方程组。
| 候选 | 检验 | 检验 | 满足方程组? |
|---|---|---|---|
| No | |||
| No | |||
| Yes |
只有同一个赋值通过每一项原始真值检验,方程组才算解出。
相减法分离观测发生的变化
开头的方程组为
\begin{aligned} w+b&=5, \tag{1}\\ 3w+b&=9. \tag{2} \end{aligned}两个方程都含有相同的 。从方程 (2) 中减去方程 (1) 的整个左侧,并在右侧做同样 的相减,就能消去 :
现在将 代入任一原方程。使用方程 (1),
相减法也有 AI 层面的解释。在两个观测之间,输入增加了 ,输出增加了 。偏置对两个预测的贡献相同,因此在差值中消失。权重就是输入每增加一个 单位时输出的变化量:
知道类似斜率的权重后,任意一行都能揭示偏置。这是精确的两点拟合,并不是普通大数据 集训练的描述。真实观测可能包含噪声,第三行也可能与前两行确定的直线不一致。后续 课程会为这些情况发展工具。
代数答案就是几何交点
每个观测都可以在 参数平面中整理成一条直线:
这张图不是通常的观测输入 对目标 的图。横坐标是候选权重,纵坐标是候选偏置。 第一条直线上的每个点都拟合观测 1;第二条直线上的每个点都拟合观测 2;它们在 处的交点同时拟合两者。
改变下面的第二个观测。实线仍为 ,虚线变为 。原生滑块可以调整 第二个输入 和目标 ,三个按钮则跳转到有代表性的交点状态。
| 量 | 当前值 | 解释 |
|---|---|---|
| 观测 1 约束 | w + b = 5 | 实线上的每个点都拟合第一个观测。 |
| 观测 2 约束 | 3w + b = 9 | 虚线上的每个点都拟合第二个观测。 |
| 交点类别 | 一个共同点 | 一个解:直线在权重 w = 2、偏置 b = 3 处相交。 |
| 恢复的权重 w | 2 | 该坐标属于共同解。 |
| 恢复的偏置 b | 3 | 该坐标属于共同解。 |
组件首次由服务器渲染的状态就是示例方程组:、,以及 。 其状态句和表格独立于 SVG 包含结论,即使没有 JavaScript 也仍然有用。直线标签还使用 实线和虚线图案,交点有独立的圈加号形状,因此颜色不是唯一的状态提示。
三种图景涵盖两条直线的全部可能
对于以下方程族,
从第二个方程中减去第一个方程得到
这两个差值无需矩阵就能对几何形状进行分类。
| 系数比较 | 目标比较 | 几何形状 | 方程组解集 |
|---|---|---|---|
| 任意值 | 相交 | 一个点 | |
| 平行 | 空集: | ||
| 重合 | 整条共同直线 |
当 时可以进行除法,并得到一个权重:
当 时,左侧差值为零。如果目标不同,相减后的方程变为右侧非零的 ,产生矛盾。如果目标也相同,相减变成恒等式 :第二个方程只是 重复第一个方程,没有增加新的限制。
下一课将把这个预览发展为对无解、唯一解和多解的系统研究。现在只需记住几何检验:相交 直线共有一个点,不同的平行直线没有共同点,重合直线共享其全部点。
NumPy 验证拟合,Matplotlib 绘制约束
无需把计算隐藏在通用求解器中即可实现。下面的函数恰好接收两个观测,处理输入重复的 边界,并将恢复的参数与两个原始数据行进行检验。
import numpy as np
import matplotlib.pyplot as plt
def recover_two_parameter_model(x, y, atol=1e-12):
delta_x = x[1] - x[0]
delta_y = y[1] - y[0]
if np.isclose(delta_x, 0.0, rtol=0.0, atol=atol):
if np.isclose(delta_y, 0.0, rtol=0.0, atol=atol):
return "many", None
return "none", None
weight = delta_y / delta_x
bias = y[0] - weight * x[0]
residual = weight * x + bias - y
return "one", (weight, bias, residual)
x = np.array([1.0, 3.0])
y = np.array([5.0, 9.0])
classification, result = recover_two_parameter_model(x, y)
weight, bias, residual = result
print("classification:", classification)
print("weight:", weight)
print("bias:", bias)
print("predictions:", weight * x + bias)
print("residual:", residual)
print(
"both constraints satisfied:",
np.isclose(residual, 0.0, rtol=0.0, atol=1e-12),
)
candidate_weight = np.linspace(-1.0, 5.0, num=121)
bias_from_first = y[0] - x[0] * candidate_weight
bias_from_second = y[1] - x[1] * candidate_weight
plt.plot(candidate_weight, bias_from_first, label="w + b = 5")
plt.plot(
candidate_weight,
bias_from_second,
"--",
label="3w + b = 9",
)
plt.plot([weight], [bias], "o", label="shared solution")
plt.xlabel("weight w")
plt.ylabel("bias b")
plt.legend()
plt.show()
相交情形的执行输出为:
classification: one
weight: 2.0
bias: 3.0
predictions: [5. 9.]
residual: [0. 0.]
both constraints satisfied: [ True True]
numpy.isclose
使用明确的相对和绝对容差比较数字。这里参考值为零,因此 rtol=0.0 与 atol=1e-12
清楚表达了预期的绝对阈值。该测试检验的是这次浮点执行,并不能替代精确的代数推导。
numpy.linspace
在选定区间返回等间距样本。121 个采样权重为 Matplotlib 提供了足够的线节点,使图形
清晰,但这些样本不是数学上的解集。每条直线都包含无穷多个实点。Matplotlib 的
plot 文档规定,
提供的 x 和 y 值是线节点的坐标;调用两次就能绘制两条约束直线。
当数据集要求更多时,精确拟合可能失败
恢复的模型 拟合 和 。假设第三个观测为 。 模型预测
因此残差为 。在参数平面中,新的一行贡献第三条直线 ,它不经过 。不存在一个参数对能够精确拟合三行。
这并不意味着第一次计算错误,而是问题发生了变化。两行数据选出了穿过这两个观测的精确 直线;第三行显示完整数据集不在这条直线上。机器学习实践常把“精确满足每个方程”替换 为“寻找预测总体接近的参数”,但这个近似问题属于后续课程。
另一个误解方向相反。如果两个观测完全相同,例如 和 ,方程组并没有 学到两个参数,只是把 写了两遍。那一条直线上的每个点仍然都能拟合,因此权重 和偏置仍无法确定。
数据集的断言存在于交点
一个观测可以证明某个参数对拟合一行。方程组提高了标准:同一个参数对必须通过每一行的 检验。在两行示例中,相减观测揭示权重,代入恢复偏置,而两条参数直线的交点说明了答案 为何是共同的。
这种几何习惯会延续到下一课。当新约束到来时,检查它增加了什么:新的交点、一个矛盾, 还是仅仅又画了一遍同一条直线。
检查你的理解
问题 1
将 (w, b) = (1, 4)、(2, 3) 和 (3, 0) 代入方程组 w + b = 5 与 3w + b = 9 进行检验。哪个数对(如果有)满足方程组?
显示分步解答
将每个数对代入两个原方程。
对于 ,
它只满足第一个约束。对于 ,
它满足两个约束。对于 ,
它只满足第二个约束。因此 是所列数对中唯一满足方程组的数对。只通过其中一项 真值检验是不够的。
问题 2
用相减法求解 2u + v = 8 和 5u + v = 17。在两个方程中验证结果,并指出交点。
显示分步解答
从第二个方程中减去第一个方程。括号可以确保相减作用于每一项:
将 代入第一个方程:
现在验证两个原方程:
解以及几何交点为 。
问题 3
仿射模型 ŷ = wx + b 观测到 (x, y) = (−1, 1) 和 (2, 10)。恢复 w 和 b,然后写出拟合后的预测规则。
显示分步解答
将观测转换为参数约束:
从第二个方程中减去第一个方程:
将 代入 :
拟合规则为 。它给出 和 ,因此两个残差 都为零。
问题 4
分类 2x + y = 4 与 2x + y = 7 的交点。说明相减法如何证明这一分类。
显示分步解答
从第二个方程中减去第一个方程:
对任何 而言, 都是错误的。两条直线的左侧相同,因此斜率相同,但右侧 不同使它们具有不同的截距。它们是不同的平行直线。它们没有交点,因此方程组的解集是 。
问题 5
分类方程组 2x + 2y = 10 与 x + y = 5。解释为什么写出两个方程不会产生唯一解。
显示分步解答
将第一个方程除以非零数 :
结果恰好是第二个方程。因此两个方程画出同一直线。每个满足 的点 都满足两者:
将该等式乘以 2 可得 。方程组沿一条重合直线有无穷多个解;第二个 方程只是重复,而没有缩小第一个约束。
问题 6
一名学生从 3w + b = 9 中减去 w + b = 5,却写成 2w + 2b = 4。找出第一个错误,正确完成求解并验证。
显示分步解答
相减必须作用于第一个方程的整个左侧:
学生得到 是符号分配错误。由于 ,正确步骤为
代入 得到 ,所以 。在两个原方程中验证得到
因此 是解。
问题 7
模型 ŷ = 2x + 3 拟合观测 (1, 5) 和 (3, 9)。第三个观测为 (2, 8)。同一个参数对能否满足三个约束?计算并解释残差。
显示分步解答
在第三个输入处计算模型:
使用残差 ,第三个残差为
参数对 仍满足前两个约束,但不满足第三个,因为 。因此不能,这个参数对不满足三方程组。负残差表示其预测值比 第三个目标低一个单位。