Ran Wei/数学系列
English
计算机科学与人工智能的数学基础 — Ran Wei

向量空间、基、秩与可辨识性

证明子空间与基,计算四个基本空间,推导秩–零化度,区分预测唯一与参数唯一。

10 小时4 个时段3 个实验12 道练习与 2 道拓展10 道自测题

完成后你能够

  • 按完整量词与反例检验子空间封闭。
  • 找张成且独立的基及唯一基坐标。
  • 区分行、列、零与左零空间及其所在维度。
  • 证明有限维秩–零化度并用于分类 Ax=b。
  • 给出预测相同的参数族,限定只在训练集等价的情形。
  • 区分精确秩与依赖尺度、容差的数值秩。

开始之前

模块 04 与 10:证明结构、线性映射、等价行操作、主元与自由变量。数值实验需 NumPy 准备。

目录

学习计划

10 小时

时间包含练习,是估计值;可按需要拆分时段。可选拓展练习额外需要 35 分钟。进度保存在当前浏览器,中英文版本共享。

1

预测明确,不代表其表示没有冗余

矩阵方程可以确定输出,却让若干输入坐标彼此可替换。含摄氏、华氏和截距三列的模型就是例子:三列不可能承载三个独立信息方向。不同权重可以对每一条符合温度换算规则的记录给出相同预测;另一种设计可能只在训练记录上相同,在下一条记录上不同。可辨识性要区分这些主张。

本课把模块 10 的主元计算转化为空间、坐标和信息的论证。你将证明封闭性,区分张成与独立,计算四个基本空间,并推导秩–零化度,而不只是记忆维数公式。最后连接精确代数、数值秩策略与参数解释。

检索检查:解释可逆增广行操作和自由变量。需要时复习模块 10及证明结构。数值实验参见 NumPy 准备。这里的空间和标量均为实数;实验明确区分有理数精确运算与浮点判定。

2

向量空间与子空间判据

向量空间是带加法与标量乘法的集合 V,满足坐标代数中的熟悉规律:加法结合、交换,存在加法单位元 0,每个向量有加法逆元;标量乘法对向量加法及标量加法分配;连续缩放等于标量乘积的缩放;乘以一不改变向量。两种运算都必须留在 V 内。只有集合还没有定义向量空间,运算与标量域也是定义的一部分。

实坐标空间逐分量满足这些规律。向量不一定是箭头或数组。次数至多二的实多项式在通常加法、缩放下构成向量空间:系数相加、缩放不会出现三次项。零多项式虽没有通常意义的有限次数,仍属于这个空间。固定定义域上的实函数在逐点运算下也构成空间,其中零向量是零函数。函数相等表示在每个定义域点相等,不只是若干采样输入上相等。

V 的子空间 W 使用 V 的相同运算,并且本身为向量空间。一个充要判据是:W 非空,并且对每个 u,v∈W 和每个实数 a,b,au+bv∈W。必要性来自两种运算封闭。充分性中,非空给出一个 u;系数都取零得到 0,取 a=−1 得到负向量,适当选择系数得到加法和缩放。其他代数规律从 V 继承,因为运算没有改变。这个论证说明,空集虽可能空真地满足某种封闭量词,仍不能通过子空间判据。

齐次线性约束的解集往往是子空间,因为线性映射满足 L(au+bv)=aL(u)+bL(v)。所以 L(v)=0 的解集含零且封闭。若干此类约束的交集也封闭:两个成员的组合仍满足每个约束。任意一族子空间的交集也是子空间;并集则未必。横轴上的向量加上纵轴上的向量,可以离开两轴的并集。

例题详解
齐次平面与平移平面

设 W={(x,y,z):x+y−z=0}。零属于 W,对 u,v∈W,组合 au+bv 的约束值等于 a·0+b·0=0,因此对所有标量封闭。U={(x,y,z):x+y−z=1} 不含零,立即失败。U 是仿射平面:任取一个解 p,例如 (1,0,0),可写成 p+W,但在继承的运算下不是向量子空间。

齐次子空间与仿射平移的区别影响可行集和模型约束。已知 Av=b 的一个解 p,其他解 v 都满足 A(v−p)=0。反过来,对每个核元素 n,p+n 都解方程。因此解集恰好是 p+N(A),不是只找到几个解的办法。相容非齐次系统的解集只有在 b=0 时才可能含零;否则不能是子空间。

不要把判据简化为“看起来平直”。射线虽然直,却不对负标量封闭;有界线段不对任意缩放封闭;球面不含零;过零的两条不同直线的并集不对加法封闭。证明必须覆盖每一对向量与每个标量,而反证只需一个反例。非负正交象限对非负组合封闭,却不是实向量子空间;这种不同结构也有用途,但需要自己的假设。

检验理解

满足 p(0)=0 的多项式构成子空间吗?p(0)=1 呢?

查看答案

第一种含零,且 (ap+bq)(0)=a·0+b·0=0,因此是子空间。第二种不含零多项式。论证既可用于所有实多项式,也可用于指定次数上界的多项式空间;应说明所在空间。

3

张成、相关与独立信息

v₁,…,vₖ 的张成是所有实系数组合 a₁v₁+…+aₖvₖ 的集合。它是子空间:零系数给出零,相加和缩放组合只是改变系数。它也是包含这些向量的最小子空间;任何包含它们的子空间都因封闭性包含全部组合。张成说明表示能够表达哪些方向,系数说明如何表达一个具体向量。

若只有全部系数为零的组合才能得到零向量,该列表线性无关;若存在非零系数向量使组合为零,则线性相关。“非零系数向量”指至少一个系数非零,不要求每个系数都非零。选一个非零系数移项,就把对应向量写成其他向量的组合;反过来,这种表达也给出相关关系。因此对非空列表,相关恰好意味着冗余。含零向量的列表相关,重复一个非零向量也相关。

边界情况同样有一致定义。空列表无关,因为没有非平凡系数选择;采用空和为零的约定,其张成为零子空间。单个非零向量无关:av=0 时,可用一个非零坐标推出 a=0,或在 a≠0 时乘以 1/a 导出 v=0 的矛盾。两个非零向量即使不相同,也可能互为任意标量倍数。独立是整体性质;只检验每一对,不能证明三条或更多向量独立。

例题详解
每对都不平行,整体仍冗余

u=(1,0),v=(0,1),w=(1,1)。没有一对互为标量倍数,但 u+v−w=0 使三向量列表相关。前两个已张成 R²;加入 w 不改变张成或独立方向数。相比之下,u 与 2u 只张成横轴。列出了两条向量,并不自动拥有两个独立方向。

以这些向量为列组成 A,Ac=0 恰好表示 c 的系数给出相关关系。这把定义直接连到消元:齐次系统的非零解就是相关见证。每列都有主元时没有自由系数变量,列无关;存在自由列时,把它对应自由变量设一、其他自由变量设零,就产生非零关系。计算给出具体见证;只报数值“秩”可能掩盖哪些列冗余。

求张成且独立子列表,可按顺序处理有限生成列表:只有新向量不在已保留向量的张成中时才保留。独立性保持,因为若新关系中新的系数非零,就可把新向量表达为旧向量组合;若其系数为零,则违反旧列表独立性。被拒绝向量已可表示,所以最终列表张成所有生成元,也张成原空间。这个有限贪心论证证明有限生成空间存在基,但不保证唯一偏好的基;顺序与解释目的可以影响选择。

张成讨论精确可表示性,不自动涉及相似、物理意义或预测质量。两列可以精确独立,却尺度不当或近乎冗余;一个相关特征仍可以是有用的具名量,只是没有添加线性方向。去除冗余能澄清参数,却不能仅凭一个样本、一种表示下的相关就宣称该特征对所有未来任务都无用。

生成列表与独立方向u一零、v零一、w一一三条向量张成二维平面,w是u加v,故列表相关。三条生成向量,两个独立方向u=(1,0)v=(0,1)w=(1,1)w = u + vu + v − w = 0张成 R²;维数二
图 11.1

三条向量生成一个平面,但第三条是前两条之和。生成列表长度与独立方向数是不同数量。

交互演示

选择两个生成向量及目标,比较整个平面、一条直线和零子空间。对这些整数预设,得到精确可表示见证或不相容证书。

检验理解

为什么一个非零 c 满足 Ac=0 就证明相关,而对十个选定非零 c 检查 Ac≠0 不能证明无关?

查看答案

相关要求存在一个见证;无关要求每一个满足 Ac=0 的系数向量都为零。有限样本可能漏掉零方向。精确消元分析整个解集,十次试验只分析十个选择。

4

基、维数与坐标变换

基是张成且独立的列表。张成保证每个向量有表达,独立保证表达唯一:两种表达相减得到零组合,系数必须逐项相等。两个条件都不可少。冗余张成列表可以给同一向量多种描述;未张成的独立列表无法描述空间所有向量。所以基坐标取决于空间及选定的有序基。

若 B=(b₁,…,b_d) 为基,用 [v]_B 表示 v=Σcᵢbᵢ 的系数元组。向量与坐标元组通过基映射相关,但不指定 B 就不能互换。在 Rᵈ 的坐标单位基下,元组值恰好与通常坐标一致,容易掩盖区别;换基时元组改变,表示的向量仍相同。重排基会改变坐标次序,缩放一个基向量则需反向缩放对应坐标。

例题详解
非标准基改变坐标

b₁=(1,1),b₂=(1,−1)。解 c₁b₁+c₂b₂=(3,1),得到 c₁+c₂=3,c₁−c₂=1,所以 [v]_B=(2,1)。基矩阵 P=[[1,1],[1,−1]] 把 B 坐标映到标准坐标,P(2,1)=(3,1)。其逆为 [[1/2,1/2],[1/2,−1/2]]。描述变了,向量没有移动。

为什么基的长度定义良好?需要有限交换论证。设 b₁,…,b_d 张成 V,u₁,…,u_k 无关。用 b 列表表达 u₁;u₁ 非零,至少一个系数非零。解出相应 b,以 u₁ 替换它,新列表仍以 d 条向量张成。假设已插入前 j−1 条 u。用当前张成列表表达 u_j,至少一个剩余原向量的系数非零;否则 u_j 在前面 u 的张成内,违反独立性。以相同移项替换该原向量,每步使用一个剩余位置,因此不能插入超过 d 条独立向量,k≤d。

对两个基双向应用此界:第一个独立基的长度不超过第二个张成基,反之亦然,所以长度相等。这一共同有限长度就是 V 的维数。零空间维数为零,基为空。d 维空间的子空间维数至多 d,因为子空间内独立的列表在所在空间也独立。d 维空间中 d 条独立向量必张成;否则添加张成之外的向量会得到 d+1 条独立向量,违反上界。

也由此证明基扩张:从有限维空间任意独立列表出发,检查一个已有的有限张成列表,遇到当前张成之外的生成元就加入。过程保持独立,所有生成元处理完即张成。所以子空间的基可扩张成所在空间的基。后面秩–零化度证明要用这个存在论证。在计算中,主元可找到扩张;在定理中,它连接局部约束与整体维数。

对同一 d 维空间两个基 B,C,坐标变换 T 的第 i 列为 [bᵢ]_C,于是 [v]_C=T[v]_B。两种坐标都唯一,T 可逆。映射的矩阵也依赖输入和输出基:若输入、输出新基矩阵相对原坐标分别为 P,Q,则新表示为 Q⁻¹AP。对同一空间上的映射,两侧采用相同换基时成为 P⁻¹AP。这是一个映射的不同描述;没有同步改变坐标约定而单改 A,可能是在改变映射本身。

检验理解

(1,0),(0,1),(1,1) 是 R² 的基吗?第三条向量相对于整个列表有唯一系数吗?

查看答案

它张成但相关,不是基。第三条有系数 (0,0,1) 与 (1,1,0),实际上有无穷多种。只有选定张成且独立列表才得到唯一坐标。

5

四个基本空间及其所在维度

对 m×n 矩阵 A,列空间 C(A) 是 Rᵐ 内各列的张成,也即像 {Ax:x∈Rⁿ};行空间 R(A) 是把各行看成 Rⁿ 向量后的张成;零空间 N(A)={x∈Rⁿ:Ax=0} 在输入空间;左零空间 N(Aᵀ)={z∈Rᵐ:Aᵀz=0} 在输出空间。“左”来自 zᵀA=0,不是一种新的第五类矩阵运算。尤其对矩形矩阵,应先写所在维度再计算。

可逆行操作保持行空间,因为新行是旧行组合,逆操作又给出反向包含。它保持零空间,因为保持齐次方程解集。它通常改变作为 Rᵐ 子集的列空间。若 E 是行操作矩阵的可逆乘积,化简矩阵为 EA,其列空间是旧列空间在 E 下的像。维数相同不意味着两个集合相同。所以从化简矩阵确定主元列后,应取原矩阵相同列索引,构造 C(A) 的基。

精确理由如下。阶梯矩阵的主元列独立:从最后主元行向前检查零组合,迫使每个系数为零。每个非主元列都是主元列组合,可在主元行的三角系统中回代解系数,主元以下行全零。因此主元列是化简列空间的基。对关系与独立性应用 E⁻¹,原矩阵同一列索引也构成基。主元数于是等于列空间维数。

非零阶梯行独立:不同首项位置使零组合系数从最早首项开始逐个为零。它们张成阶梯矩阵行空间,而该空间就是原行空间。因此行空间维数也是主元数。这一共同数是秩 r。这里证明了行秩与列秩相等,而不是把它当成未经解释的巧合。也得到 r≤min(m,n),其中零矩阵秩为零。

例题详解
一个矩阵,四个空间

A=[[1,0,1],[0,1,1],[1,1,2]] 的第三行是前两行之和,化简为 [[1,0,1],[0,1,1],[0,0,0]]。原第一、二列 (1,0,1),(0,1,1) 为列基,两条非零化简行为行基。Ax=0 给出 x₁=−x₃,x₂=−x₃,所以 N(A)=span{(−1,−1,1)}。本例 A 对称,左零空间恰有同一基。行、列空间都是平面 z=x+y;两种零空间都是直线。

每个零向量垂直每条行,因为这些点积就是 Ax 的分量;每个左零向量垂直每列,因为这些点积就是 Aᵀz 的分量。这些结论直接来自点积。若 Ax=b,则任意左零 z 必满足 zᵀb=zᵀAx=0。非零值给出不相容证书。本例 b=(2,3,5) 满足条件,b=(2,3,6) 的证书值为一。

左零条件也充分。以 E 化简 [A|b],若无解,阶梯形必含系数全零、常数非零的一行。E 中相应行 zᵀ 满足 zᵀA=0,zᵀb≠0。因此若 b 与每个左零向量垂直,就不会有矛盾行,b 属于列空间。这证明 C(A)=N(Aᵀ)⊥;对 Aᵀ 同样论证,得到 R(A)=N(A)⊥。模块 12 将给出正交空间的投影公式;本课已说明它们对相容性的代数作用。

输入与输出侧的空间四乘三秩二映射,输入侧行空间二维零空间一维,输出侧列空间二维左零空间二维。矩形映射的四个基本空间:例 m=4、n=3、r=2A输入 R³输出 R⁴R(A): dim 2N(A): dim 1C(A): dim 2N(Aᵀ): dim 22 + 1 = 32 + 2 = 4行 ⟂ 零;列 ⟂ 左零。所在空间不能互换。
图 11.2

行与零空间在输入侧,列与左零空间在输出侧。维数取决于秩及各侧所在空间的维数。

检验理解

能直接用本例化简矩阵的前两列作为原列空间基吗?

查看答案

不能。它们为 (1,0,0),(0,1,0),张成 z=0,而原列平面为 z=x+y。主元索引告诉我们选哪些原列。行操作保持列关系和秩,但变换了实际列向量。

6

秩–零化度与完整解族

线性映射的零化度是核的维数。秩–零化度定理说,从 n 维输入空间出发的线性映射 A 满足 rank(A)+dimN(A)=n。它把输入自由度分为改变输出的方向与消失的方向。输出维数可能为 m;左零化度是 m−r,不是 n−r。混淆这两种计数会误判矩形系统是否相容或唯一。

不用把“数自由变量”当成未经解释的规则,也可证明。取核基 k₁,…,k_q,用已证有限扩张把它扩成输入基 k₁,…,k_q,u₁,…,u_{n−q}。我们证明 Au₁,…,Au_{n−q} 是像的基。张成方面,把任意输入 x 按扩张基展开,应用 A 后核项消失,Ax 是 Au 的组合。独立方面,若 ΣcᵢAuᵢ=0,则 Σcᵢuᵢ 在核内,所以等于 Σdⱼkⱼ。两式相减得到完整扩张基的零组合,其独立性使所有 cᵢ,dⱼ 为零。因此像基长度为 n−q,即 r+q=n,无需方阵或可逆假设。

消元给出计算版本。齐次系统有 r 个主元变量、n−r 个自由变量;逐次把一个自由坐标设一、其他自由坐标设零,再解主元变量,得到 n−r 条向量。它们的自由坐标位置为不同单位向量,所以独立;任意自由坐标赋值是这些赋值的组合,主元方程唯一确定其余坐标,所以它们张成。由此得到核的完整基,而不是几个碰巧满足 Ax=0 的样本。

例题详解
可解目标对应仿射解族

对前述 A 与 b=(2,3,5),一个解是 p=(2,3,0)。每个解为 p+t(−1,−1,1)=(2−t,3−t,t)。任意实 t 代入都得到 (2,3,5)。反过来,Ax=b 给出 x₁+x₃=2,x₂+x₃=3,取 t=x₃ 就得到恰好这一族。解集有一个自由维度,但 b 非零,所以不是向量子空间。

完整分类随之得到:目标可解当且仅当在 C(A) 内;可解时所有解是 p+N(A),唯一当且仅当核为零,即 r=n。Rᵐ 每个目标可达当且仅当 C(A)=Rᵐ,即 r=m。两种性质同时成立,只能是满秩方阵。高矩阵满列秩可对相容目标确定唯一输入,却不让所有目标相容;宽矩阵满行秩可到达每个目标,却至少保留 n−m 个零方向。说“满秩”时应说明哪一维度是限制。

正交关系也将任意输入 x 分为行空间成分与核成分。两空间交集只有零:属于二者的向量既在行空间又垂直该空间,因此与自身点积为零。两维数按秩–零化度之和为 n;把两基合起来得到 n 条独立向量,因此是输入空间基。每个 x 都唯一写为 x=u+k,u∈R(A),k∈N(A)。A 对 u 与 x 给同一输出;限制在行空间上时 A 单射,而这些行空间输入到达整个列空间。映射恰好丢掉核中的信息。

约束求解中,零向量表示找到一个解后仍可作的改变;学习中,表示设计矩阵无法区分的参数变化;压缩或传感中,表示产生相同测量的信号。代数相同,x 的解释不同。若限制输入只来自特殊集合,可辨识性也会改变:两个许可输入有歧义时,其差必须是零向量,但不是每个零位移都会留在许可集合。除非声明其他集合,本课唯一性结论针对不受约束的实输入。

检验理解

m=5,n=3 的设计秩为三,零化度与左零化度分别是多少?每个目标可解吗?

查看答案

分别为零与二。每个相容目标有一个输入解,但列空间只在 R⁵ 内占三维,不能覆盖全部目标。满列秩给出单射,不给出对更大输出空间的满射。

7

可辨识性、结构冗余与数值秩

固定设计 X 的线性预测为 Xw。w,w′ 的预测相同,当且仅当 X(w′−w)=0,即差在 N(X) 内。与 w 等价的全部参数构成 w+N(X)。对这里不受约束的线性表示,参数可辨识性指不同权重在指定记录上给出不同预测,等价于 X 满列秩。拟合预测唯一可以与权重不唯一同时发生。算法选择一个代表,并不证明数据辨识了它。

例题详解
摄氏、华氏与截距

记录为 (1,C,F),其中 F=1.8C+32。每条记录都与 n=(−32,−1.8,1) 点积为零,因此 Xn=0。从 w=(5,2,−1) 出发,w′=w+0.5n=(−11,1.1,−0.5)。两者在 C=0,10,20 都预测 −27,−25,−23,在 C=30 都预测 −21。模型实际上约化为 (w₀+32w_F)+(w_C+1.8w_F)C。这两个组合系数可以由不同温度辨识,而原三个权重不能。

单一分类变量的截距加全部独热列也如此。每条记录恰好有一个 K 类指示值为一,指示列之和等于截距,零方向为 (−1,1,…,1)。删一条指示列形成基准类别表示:截距是基准预测,其余系数是相对基准的差。去掉截距、保留全部指示列,则每个类别有自己的预测系数。两种参数化可表示相同预测函数,系数含义不同。满秩还要求观测覆盖保留类别;缺失类别会增加歧义。

训练预测等价并不总意味着新记录上的函数等价。特征 (1,x,x²) 只在 x=0,1 观测,后两列相同。改变权重 (0,−1,1) 不改变训练预测,却在 x=2 改变 −2+4=2。摄氏–华氏则是在合法换算定义域上的结构特征恒等式,故零方向在该域始终不可见。传感器故障或不同特征生成规则也可能破坏此假设。应说明相关是在样本、声明的输入域,还是所有实特征元组上成立。

零方向的参数等价权重五二负一与负十一一点一负零点五在合法华氏摄氏换算下预测都是负二十七加零点二C。不同权重,相同有效温度预测w = (5,2,−1)w′ = (−11,1.1,−0.5)共同预测函数−27 + 0.2Cw′ − w = 0.5(−32,−1.8,1); F = 1.8C + 32
图 11.3

沿零方向的不同参数给出同一预测。结构特征恒等式可在声明定义域保持等价;训练记录中的巧合未必。

精确秩问数学模型中的关系是否严格为零;数值秩问在声明分辨率下哪些方向可区分。[[1,1],[1,1+δ]] 行列式为 δ,只要 δ≠0,精确秩就是二。当 δ=10⁻¹²,它接近 δ=0 的相关情形。小输入或测量扰动可影响微小差异是否实际可分辨。浮点阈值可以有意把它报为一个有效方向,但没有证明精确行列式消失。

固定 NumPy 秩接口使用模块 14 将讲解的奇异值——非负方向强度量,计算大于容差的数量。默认阈值随最大值、矩阵维度和机器精度缩放。自定绝对阈值有自己的单位,整矩阵缩放可改变结论。实验 3 中,同一近相关矩阵在 10⁻¹⁴ 与 10⁻¹⁰ 阈值下数值秩为二与一;全局乘一百万但绝对阈值不变,判定改变;阈值同比缩放则保持本例结论。记录 dtype、特征单位、容差与目的。阈值应反映计算或测量分辨率,而不是默默声称一个精确定理。

精确秩与数值分辨率精确δ为十的负十二次非零,秩二;实验浮点阈值十负十四与十负十分别给数值秩二与一。非零差异与解析阈值是两种主张精确有理模型A = [[1,1],[1,1+δ]]δ = 10⁻¹² ≠ 0detA = δ;秩二浮点分辨率策略容差 10⁻¹⁴ → 数值秩二容差 10⁻¹⁰ → 数值秩一记录尺度与 dtype阈值判定不会把精确非零量改成零。
图 11.4

微小非零特征差使精确秩为二,但选定分辨率可视该方向为未解析。策略与精确命题回答不同问题。

删去精确冗余特征或施加约束,可以选唯一表示,但系数含义取决于该选择。最小范数约定和正则化引入额外标准,后续讲解;它们可稳定或选择参数,却不恢复观测未区分的信息。独立性也不证明因果效应、误差界或泛化;这些需要代数之外的统计和建模假设。应明确矩阵决定什么、留下什么自由度、解释针对哪个定义域。

检验理解

求解器为秩亏设计返回一个系数向量,系数就可辨识了吗?数值秩为一就证明精确相关了吗?

查看答案

两者都没有。求解器可能按额外约定选代表;数值秩依赖分辨率策略,精确相关需精确关系或相应定理。预测、选定参数与数据提供的信息是不同主张。

8

常见误解

主张 修正与见证
任何直的集合都是子空间 偏移直线不含零,射线不对负缩放封闭。
逐对独立就整体独立 (1,0),(0,1),(1,1) 每对无关,整体有关系。
张成就有唯一坐标 还需要独立。
化简主元列张成原列空间 应取原矩阵相同索引的列。
满列秩使每个目标可解 它使相容输入唯一,满行秩才覆盖全部目标。
训练预测相同就是相同函数 x 与 x² 在零、一相同,在二不同。
阈值秩证明精确相关 区分精确与有效秩,并声明容差。
9

三个 CPU 实验

采用 Python 3.11 及数组准备中的 NumPy 环境。第一个实验仅用标准库 Fraction。显示输出来自构建时运行可下载脚本的捕获。实验记录应保留形状、零见证和每个声明容差。

实验 A 精确空间与证书

运行前预测主元索引与四空间维数,追踪每个自由变量如何生成一条零基向量,用乘法验证每条基向量。比较原主元列与化简主元列。说明为何本例左零证书拒绝第二个目标而接受第一个。

下载 lab1_exact_spaces.py

"""Exact rational pivots and four spaces; no floating-point zero decisions."""
from fractions import Fraction

def rref(matrix):
    if not matrix or not matrix[0] or any(len(r) != len(matrix[0]) for r in matrix):
        raise ValueError("Need a nonempty rectangular matrix")
    rows = [[Fraction(v) for v in row] for row in matrix]
    pivots, active = [], 0
    for column in range(len(rows[0])):
        selected = next((i for i in range(active, len(rows)) if rows[i][column]), None)
        if selected is None:
            continue
        rows[active], rows[selected] = rows[selected], rows[active]
        pivot = rows[active][column]
        rows[active] = [v / pivot for v in rows[active]]
        for i in range(len(rows)):
            if i != active:
                factor = rows[i][column]
                rows[i] = [a - factor * b for a, b in zip(rows[i], rows[active])]
        pivots.append(column)
        active += 1
        if active == len(rows):
            break
    return rows, pivots

def null_basis(matrix):
    rows, pivots = rref(matrix)
    free = [j for j in range(len(rows[0])) if j not in pivots]
    basis = []
    for j in free:
        vector = [Fraction(0)] * len(rows[0])
        vector[j] = 1
        for i, p in enumerate(pivots):
            vector[p] = -rows[i][j]
        basis.append(vector)
    return basis

def matvec(matrix, vector):
    return [sum(a * b for a, b in zip(row, vector)) for row in matrix]

if __name__ == "__main__":
    A = [[1, 0, 1], [0, 1, 1], [1, 1, 2]]
    reduced, pivots = rref(A)
    column_basis = [[row[j] for row in A] for j in pivots]
    row_basis = reduced[:len(pivots)]
    kernel = null_basis(A)
    transpose = [list(col) for col in zip(*A)]
    left_kernel = null_basis(transpose)
    strings = lambda rows: [[str(v) for v in row] for row in rows]
    print("RREF:", strings(reduced))
    print("Original pivot columns:", column_basis)
    print("Row-space basis:", strings(row_basis))
    print("Null / left-null bases:", strings(kernel), strings(left_kernel))
    assert all(matvec(A, v) == [0, 0, 0] for v in kernel)
    assert all(matvec(transpose, v) == [0, 0, 0] for v in left_kernel)
    assert len(pivots) == 2 and len(kernel) == 1
    print("Rank / nullity / left nullity:", len(pivots), len(kernel), len(left_kernel))
    for target in [[2, 3, 5], [2, 3, 6]]:
        certificate = sum(a*b for a, b in zip(left_kernel[0], target))
        print("Target / left-null certificate:", target, str(certificate), "consistent" if certificate == 0 else "inconsistent")
    for matrix in [[[0, 0], [0, 0]], [[1, 0], [0, 1]], [[1, 2], [2, 4]]]:
        _, p = rref(matrix)
        assert len(p) + len(null_basis(matrix)) == len(matrix[0])
    print("Zero, identity, and dependent cases satisfy exact rank-nullity.")
输出
RREF: [['1', '0', '1'], ['0', '1', '1'], ['0', '0', '0']]
Original pivot columns: [[1, 0, 1], [0, 1, 1]]
Row-space basis: [['1', '0', '1'], ['0', '1', '1']]
Null / left-null bases: [['-1', '-1', '1']] [['-1', '-1', '1']]
Rank / nullity / left nullity: 2 1 1
Target / left-null certificate: [2, 3, 5] 0 consistent
Target / left-null certificate: [2, 3, 6] 1 inconsistent
Zero, identity, and dependent cases satisfy exact rank-nullity.

交付:四空间、所在维度、基与维数表,并证明所给基张成全部声称空间。乘法成功只证明成员关系,主元和自由变量论证才证明完整性。

实验 B 相同预测,不同权重

手算两个权重向量,在合法特征域检查未见温度,再比较多项式巧合。找出独热设计零方向,说明去冗余的两种办法。

下载 lab2_equivalent_features.py

"""Prediction equivalence can be structural or restricted to observed records."""
import numpy as np

np.set_printoptions(precision=6, suppress=True)
celsius = np.array([0., 10., 20.])
X = np.column_stack((np.ones(3), celsius, 1.8*celsius + 32))
w = np.array([5., 2., -1.])
n = np.array([-32., -1.8, 1.])
alternative = w + 0.5*n
assert np.allclose(X@n, 0) and np.allclose(X@w, X@alternative)
print("Temperature weights / alternative:", w, alternative)
print("Training predictions:", X@w, X@alternative)
new = np.array([1., 30., 86.])
print("New valid temperature prediction:", new@w, new@alternative)
assert np.allclose(new@w, new@alternative)

categorical = np.column_stack((np.ones(3), np.eye(3)))
categorical_null = np.array([-1., 1., 1., 1.])
assert np.allclose(categorical@categorical_null, 0)
print("Intercept plus all one-hot columns rank:", np.linalg.matrix_rank(categorical), "of", categorical.shape[1])
print("One-hot null direction:", categorical_null)
assert np.linalg.matrix_rank(categorical[:, :3]) == 3

training = np.array([[1., 0., 0.], [1., 1., 1.]])
training_null = np.array([0., -1., 1.])
assert np.allclose(training@training_null, 0)
unseen = np.array([1., 2., 4.])
print("x and x squared: training change / unseen x=2 change:", training@training_null, unseen@training_null)
assert unseen@training_null == 2
print("A structural temperature identity generalises; a training-only polynomial coincidence does not.")
输出
Temperature weights / alternative: [ 5.  2. -1.] [-11.    1.1  -0.5]
Training predictions: [-27. -25. -23.] [-27. -25. -23.]
New valid temperature prediction: -21.0 -21.0
Intercept plus all one-hot columns rank: 3 of 4
One-hot null direction: [-1.  1.  1.  1.]
x and x squared: training change / unseen x=2 change: [0. 0.] 2.0
A structural temperature identity generalises; a training-only polynomial coincidence does not.

交付:区分结构域等价与观测记录等价,给一个破坏训练限定主张的新记录,不从可辨识系数推断因果。

实验 C 精确秩与数值秩

用精确行列式作为数学证书,把数值库输出作为策略依赖测量。比较两个绝对阈值和全局缩放下一个相对阈值。这里奇异值是库诊断量,模块 14 将推导其分解和几何。

下载 lab3_rank_tolerances.py

"""An exact nonzero determinant and two numerical rank policies can coexist."""
from fractions import Fraction
import numpy as np

delta = Fraction("0.000000000001")
exact = [[Fraction(1), Fraction(1)], [Fraction(1), 1+delta]]
determinant = exact[0][0]*exact[1][1] - exact[0][1]*exact[1][0]
assert determinant == delta and determinant != 0
print("Exact determinant:", str(determinant), "exact rank: 2")
A = np.array([[1., 1.], [1., 1.+float(delta)]])
singular_values = np.linalg.svd(A, compute_uv=False)
print("Singular values:", [format(v, ".6e") for v in singular_values])
for tolerance in [1e-14, 1e-10]:
    rank = int(np.linalg.matrix_rank(A, tol=tolerance))
    print("Absolute tolerance / numerical rank:", tolerance, rank)
assert np.linalg.matrix_rank(A, tol=1e-14) == 2
assert np.linalg.matrix_rank(A, tol=1e-10) == 1
scaled = 1e6*A
print("Scaling by one million at absolute tolerance 1e-10:", np.linalg.matrix_rank(scaled, tol=1e-10))
assert np.linalg.matrix_rank(scaled, tol=1e-10) == 2
for label, matrix in [("A", A), ("scaled A", scaled)]:
    s = np.linalg.svd(matrix, compute_uv=False)
    relative_cutoff = 1e-10*s[0]
    print("Relative cutoff policy / rank:", label, int(np.linalg.matrix_rank(matrix, tol=relative_cutoff)))
    assert np.linalg.matrix_rank(matrix, tol=relative_cutoff) == 1
print("The cutoff is a numerical resolution policy, not an exact dependence proof.")
输出
Exact determinant: 1/1000000000000 exact rank: 2
Singular values: ['2.000000e+00', '5.000744e-13']
Absolute tolerance / numerical rank: 1e-14 2
Absolute tolerance / numerical rank: 1e-10 1
Scaling by one million at absolute tolerance 1e-10: 2
Relative cutoff policy / rank: A 1
Relative cutoff policy / rank: scaled A 1
The cutoff is a numerical resolution policy, not an exact dependence proof.

交付:报告精确秩、dtype、尺度、阈值与数值秩。解释什么分辨率假设可以支持舍弃弱方向,不把选定阈值说成精确整数或有理模型已经改变。

10

练习与完整解答

练习 1–12 必做,13–14 额外 35 分钟。封闭或独立主张应写明空间与标量域。

练习 1★★★计算6 分钟

判断 {(x,y):y=2x}、{(x,y):y=2x+1}、{(x,y):x≥0} 是否实子空间。

查看解答

第一种含零,且 (u,2u),(v,2v) 的组合为 (au+bv,2(au+bv)),因此是。第二种不含零。第三种含 (1,0) 却不含其负 (−1,0),缩放失败。每种拒绝只需一个失败条件。

练习 2★★★计算6 分钟

求 (1,0,1),(0,1,1),(1,1,2) 张成的基,并在基中表达第三条。

查看解答

前两条独立:零组合的第一、二坐标迫使两系数为零。其和为第三条,所以张成全部三条并构成基。第三条基坐标为 (1,1),张成是二维平面 z=x+y。

练习 3★★★计算6 分钟

用基 (1,1),(1,−1) 表达 (4,2),并恢复标准坐标。

查看解答

c₁+c₂=4,c₁−c₂=2 得 c₁=3,c₂=1。[[1,1],[1,−1]] 乘 (3,1) 得 (4,2)。元组 (3,1) 属于指定基,不是单位坐标基。

练习 4★★★计算6 分钟

一个 4×6 矩阵秩三,写四基本空间的维数与所在空间。

查看解答

列空间三维,在 R⁴;行空间三维,在 R⁶;零化度 6−3=3,在 R⁶;左零化度 4−3=1,在 R⁴。列空间为真子空间,不是每个输出可达;每个相容目标有三维仿射输入族。

练习 5★★★proof15 分钟

证明次数至多三、满足 p(1)=p(−1)=0 的多项式构成子空间,并求基。

查看解答

零属于集合,ap+bq 在任一点的值为 a·0+b·0,故封闭。两点都为根,故含因子 (t−1)(t+1)=t²−1;次数限制使它为 (t²−1)(at+b)。因此 t²−1,t³−t 张成。最高次数不同,零组合的三次系数先为零,然后二次系数为零,所以独立。因子结论可先除以 t−1,再在 −1 代入,因 −2 非零迫使商在该点为零。

练习 6★★★proof15 分钟

证明独立列表对其张成中任意向量至多有一个系数描述,并说明基为何还需张成。

查看解答

若 Σaᵢvᵢ=Σbᵢvᵢ,相减得 Σ(aᵢ−bᵢ)vᵢ=0,独立使所有 aᵢ=bᵢ。在张成中,存在性来自定义;对任意所在空间向量未必存在。例如 (1,0) 在 R² 独立,却不能表达 (0,1)。基用张成保证全部向量存在描述,以独立保证描述唯一。

练习 7★★★proof15 分钟

通过扩张核基推导秩–零化度,分别证明像列表张成与独立。

查看解答

核基 k₁,…,k_q 扩为 n 维定义域基,再加 u₁,…,u_{n−q}。A 作用于任意基展开会消除核项,故 Auᵢ 张成像。若 ΣcᵢAuᵢ=0,则 Σcᵢuᵢ 在核内,可写为 Σdⱼkⱼ。完整基独立使所有系数为零。因此像基长度 n−q,秩加零化度为 n。基扩张由不断添加当前张成外的生成元得到。

练习 8★★★application13 分钟

对实验 A 的 A,分类目标 (2,3,5),(2,3,6),给相容目标的全部解及另一个的不相容证书。

查看解答

列平面要求 b₃=b₁+b₂。第一种全部解为 (2−t,3−t,t),来自前两方程及冗余第三行。第二种取 z=(−1,−1,1),Aᵀz=0 但 zᵀb=1;假设 Ax=b 将给出 0=zᵀAx=zᵀb=1 的矛盾。

练习 9★★★application13 分钟

含截距、摄氏、华氏的模型,在合法温度记录上求与 (5,2,−1) 等价的全部权重,并写两个组合系数。

查看解答

预测为 −27+0.2C。全部权重 (5−32t,2−1.8t,−1+t) 的组合截距 w₀+32w_F=−27、斜率 w_C+1.8w_F=0.2 相同。若域至少有两个不同摄氏值,相等预测迫使两个组合相等,解差值就恰好得到这一族。假设华氏按 1.8C+32 生成。

练习 10★★★application13 分钟

设计含截距和三条穷尽独热类别,类别均被观测。解释零化度与两种满秩参数化。

查看解答

列满足 −截距+指示₁+指示₂+指示₃=0;每类均出现,三指示列独立。秩三,零化度 4−3=1。保留全部指示、删截距得到三类预测;保留截距和两指示得到基准预测及两类差值。二者都表达任意三类预测向量,但系数含义不同。

练习 11★★★diagnosis16 分钟

报告以化简主元列为原像基,并认为满列秩使每个目标相容。用明确或矩形例诊断。

查看解答

实验 A 化简主元列在 z=0,原列空间为 z=x+y,应取原矩阵相同主元索引。满列秩给核为零、相容输入唯一,不填满更大输出空间。A=[[1],[0]] 满列秩一,不能到达 (0,1)。每个目标相容需要满行秩。

练习 12★★★diagnosis16 分钟

[[1,1],[1,1+10⁻¹²]] 在阈值 10⁻¹⁰ 下数值秩一。作者宣称精确相关,并说只在零、一观测的 x 与 x² 特征有相同未来预测。修正两主张。

查看解答

精确行列式 10⁻¹² 非零,精确秩二。数值结论依赖分辨率、dtype 与尺度,应声明这些。多项式训练设计有零方向 (0,−1,1),但 x=2 改变预测二。训练等价只在同一特征恒等式成立处延伸,此处并非全部实数。

练习 13★★★extension15 分钟

不预设维数定义良好,用交换论证证明有限维空间两个基的长度相等。

查看解答

给独立 u₁,…,u_k 和张成 b₁,…,b_d,依次在含前面 u 的张成列表表达 u_j。独立迫使至少一个剩余 b 的系数非零,解出它并换成 u_j。列表仍张成且有 d 个位置,所以 k≤d。两基互换角色得到两个不等式,因此长度相等。交换步骤解释为何基长度能一致定义维数。

练习 14★★★extension20 分钟

用矛盾行证明 C(A)=N(Aᵀ)⊥,说明为何只检查完整左零基就足够判断相容。

查看解答

b=Ax 且 Aᵀz=0 时 zᵀb=0,得到包含。若 b 不在列空间,用可逆行操作矩阵 E 化简 [A|b] 会产生零系数非零常数行。E 对应行 zᵀ 满足 zᵀA=0,zᵀb≠0,故 b 不与左零空间垂直。由逆否得到反向包含。若 b 垂直每条完整左零基,线性性使它垂直该空间所有向量,已证等式给出相容。

11

十题自测

1
哪个集合在继承运算下为实向量子空间?
2
什么证明矩阵列相关?
3
什么使每个向量都有唯一基坐标?
4
行化简后,哪些列构成原列空间的基?
5
m×n 矩阵秩 r,左零化度为?
6
满列秩保证什么?
7
什么证明 b 与 Ax=b 不相容?
8
训练记录上 Xw=Xw′ 推出什么?
9
阈值秩与精确有理秩不同,应如何报告?
查看答案

训练预测相同等价于 w′−w∈N(X),零族 w+N(X) 不改变观测。温度特征 (1,C,1.8C+32) 在合法换算域始终消去 (−32,−1.8,1)。特征 (1,x,x²) 在 x=0,1 消去 (0,−1,1),但 x=2 不消去。未来等价要求每条新特征行与权重差点积为零。选择一个代表是额外约定,并非原观测辨识了它。

12

带着问题阅读

使用作者 Mathematics for Machine Learning 配套网站中线性代数章的空间、基、线性映射选段。数值约定参见官方 NumPy 1.26 matrix_rank。本课原创证明和例子可独立学习,阅读用于补充。

时间 选段与问题
时段 1 · 21 分钟 空间与基:坐标描述的存在和唯一分别来自哪里?
时段 4 · 20 分钟 秩接口:默认阈值如何缩放,绝对容差改变什么?
13

检索结业任务与下一步

不看笔记证明子空间判据,区分生成列表与基,说明维数为何定义良好。把四空间画在正确输入、输出侧,推导两种零化度。给零空间预测见证并限定未来记录主张。

结业任务:A=[[1,2,3],[0,1,1]] 秩二。核为 span{(−1,−1,1)},因为 x₂=−x₃,x₁=−x₃。每个 b=(b₁,b₂) 可达,全部解为 (b₁−2b₂−t,b₂−t,t)。左零空间为零,列空间为 R²。解释全部目标可达为何不使参数唯一。

进入下一课:能够给完整基、维数、解族与解释边界。模块 12 发展正交投影和最小二乘,包括唯一拟合预测与多个最小化权重为何可以并存。开放状态参见课程概览。

14

记法与双语术语

术语或记法 含义 English
向量空间、子空间 封闭线性运算、继承的小空间 Vector space / subspace
张成、线性无关 全部组合、只有平凡零组合 Span / independence
基、维数 独立张成列表、不变长度 Basis / dimension
[v]_B 指定有序基的坐标 Basis coordinates
C(A)、R(A) 列像、行张成 Column / row space
N(A)、N(Aᵀ) 输入核、输出侧核 Null / left null space
秩、零化度 像维数、核维数 Rank / nullity
可辨识性 不同参数给不同指定预测 Identifiability
数值秩、容差 可解析方向数、分辨率阈值 Numerical rank / tolerance