机器学习数学基础 120 章

矩阵、形状、索引与数据表

层级:A|必学

1. 什么是矩阵

矩阵是按行和列排列的矩形数表:

A=[a11a12a1na21a22a2nam1am2amn]Rm×n.\boldsymbol A= \begin{bmatrix} a_{11}&a_{12}&\cdots&a_{1n}\\ a_{21}&a_{22}&\cdots&a_{2n}\\ \vdots&\vdots&\ddots&\vdots\\ a_{m1}&a_{m2}&\cdots&a_{mn} \end{bmatrix} \in\mathbb R^{m\times n}.

mm 是行数,nn 是列数,形状写成“行 ×\times 列”。aija_{ij} 表示第 ii 行第 jj 列的标量。矩阵不是一堆数字的随意容器;它同时可以表示数据表、线性变换、二次型系数或变量之间的关系。

2. 数据矩阵

最常见约定是每行一个样本、每列一个特征:

X=[x1Tx2TxnT]Rn×d.\boldsymbol X= \begin{bmatrix} \boldsymbol x_1^{\mathsf T}\\ \boldsymbol x_2^{\mathsf T}\\ \vdots\\ \boldsymbol x_n^{\mathsf T} \end{bmatrix} \in\mathbb R^{n\times d}.

其中:

  • nn:样本数;
  • dd:特征数;
  • xijx_{ij}:第 ii 个样本的第 jj 个特征;
  • iixiT\boldsymbol x_i^{\mathsf T}:一个样本;
  • jj 列:某一特征在所有样本上的取值。

也有教材使用“每列一个样本”的约定。没有绝对优劣,必须通过形状与后续乘法确认。

3. 用批量线性预测理解形状

XRn×d\boldsymbol X\in\mathbb R^{n\times d}wRd\boldsymbol w\in\mathbb R^dbRb\in\mathbb R,所有样本的预测写成

y^=Xw+b1.\hat{\boldsymbol y}=\boldsymbol X\boldsymbol w+b\boldsymbol1.

形状为

(n×d)(d×1)+(n×1)=n×1.(n\times d)(d\times1)+(n\times1)=n\times1.

输出每个样本一个预测值。程序库常用广播把标量 bb 自动加到每个元素,数学表达用 b1b\boldsymbol1 明确说明复制过程。

4. 行、列与切片

常见记号并不完全统一:

  • Ai:\boldsymbol A_{i:}Ai,\boldsymbol A_{i,\cdot}:第 ii 行;
  • A:j\boldsymbol A_{:j}A,j\boldsymbol A_{\cdot,j}:第 jj 列;
  • AI,J\boldsymbol A_{I,J}:由行索引集合 II 和列索引集合 JJ 选出的子矩阵。

数学索引通常从 1 开始,Python/NumPy 从 0 开始。把公式实现为代码时要特别处理这一差异。

5. 特殊矩阵

方阵

行列数相同的 n×nn\times n 矩阵。只有方阵通常讨论行列式、特征值和普通逆矩阵。

零矩阵

所有元素为 0,形状依上下文记为 0m×n\boldsymbol0_{m\times n}

单位矩阵

In=[100010001].\boldsymbol I_n= \begin{bmatrix} 1&0&\cdots&0\\ 0&1&\cdots&0\\ \vdots&\vdots&\ddots&\vdots\\ 0&0&\cdots&1 \end{bmatrix}.

它对矩阵乘法的作用类似数字 1:IA=A\boldsymbol I\boldsymbol A=\boldsymbol A

对角矩阵

非对角元素全为 0,记作 diag(d1,,dn)\operatorname{diag}(d_1,\ldots,d_n)。它与向量相乘相当于逐坐标缩放。

三角矩阵

上三角矩阵的主对角线下方全为 0,下三角矩阵相反。LU 与 Cholesky 分解利用三角结构快速求解方程。

对称矩阵

AT=A\boldsymbol A^{\mathsf T}=\boldsymbol A。协方差矩阵、Gram 矩阵和 Hessian 在适当条件下都是对称矩阵。

6. 矩阵可以表示线性变换

y=Ax,ARm×n,xRn,yRm.\boldsymbol y=\boldsymbol A\boldsymbol x, \qquad \boldsymbol A\in\mathbb R^{m\times n}, \quad\boldsymbol x\in\mathbb R^n, \quad\boldsymbol y\in\mathbb R^m.

A\boldsymbol A 接收 nn 维输入,输出 mm 维向量。矩阵的第 jj 列是标准基向量 ej\boldsymbol e_j 被变换后的结果;输出也是这些列按输入分量加权的线性组合:

Ax=x1a1++xnan.\boldsymbol A\boldsymbol x =x_1\boldsymbol a_1+\cdots+x_n\boldsymbol a_n.

这个观点比把矩阵只看成数据表更重要。

7. 矩阵也可以表示关系或统计量

  • 邻接矩阵 AijA_{ij} 表示图中节点 i,ji,j 是否相连;
  • 距离矩阵 DijD_{ij} 表示样本 i,ji,j 的距离;
  • 协方差矩阵 Σij\Sigma_{ij} 表示第 i,ji,j 个随机变量共同变化的程度;
  • 混淆矩阵的行列对应真实类别与预测类别;
  • 核矩阵 Kij=k(xi,xj)K_{ij}=k(\boldsymbol x_i,\boldsymbol x_j) 保存两两相似度。

同样是二维数表,不同语义决定它能做什么运算。

8. 张量只需先理解为更高阶数组

标量可视为 0 阶对象,向量是一阶,矩阵是二阶,更高维数组常统称张量。例如图像批次可能形状为

(batch,height,width,channels).(\text{batch},\text{height},\text{width},\text{channels}).

严格数学中的张量比数组定义更深,但阅读基础机器学习时先掌握轴、形状与沿轴运算即可。

9. 形状检查的工程习惯

对每一步写:

  1. 输入形状;
  2. 操作在哪个轴进行;
  3. 输出形状;
  4. 是否发生广播或降维。

例如对 XRn×d\boldsymbol X\in\mathbb R^{n\times d} 按列求均值,输出是 dd 维特征均值;按行求均值,输出是 nn 个样本内部均值。axis 选错通常不会报错,却会产生语义错误。

10. 易错点

  1. m×nm\times n 始终先写行数,再写列数。
  2. 数学从 1 索引,代码常从 0 索引。
  3. 数据矩阵的样本方向不是全球统一约定。
  4. 一维数组的形状可能在广播时产生意外。
  5. 方阵不一定可逆,对称矩阵也不一定正定。

常见问答

Q1:DataFrame 就是矩阵吗?

不完全是。DataFrame 可包含字符串、缺失值和不同数据类型,并带标签语义。转为数值矩阵前需要编码和缺失处理。

Q2:为什么深度学习中常把 batch 放在第一维?

这是实现约定,方便批处理。卷积通道放在哪一轴也有不同约定,必须查框架接口。

Q3:向量是特殊矩阵吗?

计算中可把列向量看作 d×1d\times1 矩阵,但教材通常区分向量与矩阵,以突出不同几何角色。

练习

  1. 一个数据集有 1000 个样本、20 个特征,按“每行一个样本”时 X\boldsymbol X 的形状是什么?
  2. x7,3x_{7,3} 表示什么?对应 Python 索引通常是什么?
  3. Xw\boldsymbol X\boldsymbol w 的形状是什么?
  4. 写出 3×33\times3 单位矩阵与对角矩阵 diag(2,1,4)\operatorname{diag}(2,-1,4)
  5. 若按列计算 X\boldsymbol X 的均值,输出包含多少个数?
  6. 解释为什么协方差矩阵一定是方阵。

答案与提示

  1. 1000×201000\times20
  2. 第 7 个样本的第 3 个特征;通常为 X[6, 2]
  3. 1000×11000\times1
  4. 单位矩阵主对角为 1;第二个矩阵主对角依次为 2,1,42,-1,4
  5. 20 个。
  6. 它对同一组 dd 个变量做两两协方差,形状为 d×dd\times d