在前面的章节中,我们研究了向量空间、子空间以及线性独立性的重要概念。现在,我们介绍矩阵的秩,这是一个单一的数值,它概括了关于矩阵行与列之间关系以及与之相关的基本子空间维度的许多信息。可以将秩看作是衡量矩阵“有效维度”或矩阵所包含的非冗余信息量的指标。
定义矩阵的秩
矩阵 AAA 的秩,通常记作 rank(A)rank(A)rank(A),可以通过几种等价的方式定义,每种方式都提供略微不同的视角:
列空间的维度: 秩是矩阵 AAA 列空间的维度,记作 dim(Col(A))dim(Col(A))dim(Col(A))。这表明矩阵 AAA 中线性独立列的最大数量。
行空间的维度: 秩也是矩阵 AAA 行空间的维度,记作 dim(Row(A))dim(Row(A))dim(Row(A))。这表明矩阵 AAA 中线性独立行的最大数量。
线性代数中的一个基本结果是,对于任何给定矩阵,这两个维度总是相等的:
dim(Col(A))=dim(Row(A))=rank(A)dim(Col(A)) = dim(Row(A)) = rank(A)dim(Col(A))=dim(Row(A))=rank(A)
因此,秩同时说明了线性独立列的数量和线性独立行的数量。
思考一个数据集,它表示为一个矩阵 AAA,其中行是样本,列是特征。
rank(A)rank(A)rank(A) 表明了线性独立特征的数量。如果秩小于列的数量,则一些特征可以表示为其他特征的线性组合,这表明存在冗余。
rank(A)rank(A)rank(A) 也表明了线性独立样本的数量(当视作行向量时)。
计算秩
虽然秩与列空间和行空间的维度相关联,但直接根据定义通过寻找基来计算秩可能会很繁琐。
一种思考秩计算的方式是通过高斯消元法。当您将矩阵化为行阶梯形时,非零行的数量(或等效地,主元或主导1的数量)等于矩阵的秩。在消元过程中,每个主元都对应于一个线性独立的行(和列)。
然而在实际操作中,特别是在编程环境中,我们依赖数值计算库来可靠地计算秩。数值方法,通常基于像奇异值分解(SVD,我们将在第6章讲解)这样的技术,之所以被使用,是因为它们在浮点运算存在的情况下更为稳定。
在 Python 中,NumPy 的线性代数模块提供了一个直接的函数:
import numpy as np
# 示例 1:线性独立的列/行
A = np.array([[1, 0, 1],
[0, 1, 1],
[1, 1, 0]])
rank_A = np.linalg.matrix_rank(A)
# rank_A 将为 3
# 示例 2:线性相关的行(第3行 = 第1行 + 第2行)
B = np.array([[1, 2, 3],
[4, 5, 6],
[5, 7, 9]])
rank_B = np.linalg.matrix_rank(B)
# rank_B 将为 2
# 示例 3:线性相关的列(第3列 = 第1列 + 第2列)
C = np.array([[1, 4, 5],
[2, 5, 7],
[3, 6, 9]])
rank_C = np.linalg.matrix_rank(C)
# rank_C 将为 2
print(f"矩阵 A:\n{A}\n秩: {rank_A}\n")
print(f"矩阵 B:\n{B}\n秩: {rank_B}\n")
print(f"矩阵 C:\n{C}\n秩: {rank_C}")
秩与线性独立性
秩与线性独立性之间的联系是直接的:
对于一个 m×nm \times nm×n 矩阵 AAA,如果 rank(A)=nrank(A) = nrank(A)=n,则 AAA 的列是线性独立的。
如果 rank(A) 同样地,如果 rank(A)=mrank(A) = mrank(A)=m,则 AAA 的行是线性独立的。 如果 rank(A) 这在处理机器学习中的特征矩阵时尤其相关。如果特征矩阵的秩小于特征数量,这表明存在多重共线性或冗余特征。一些算法可能难以处理秩亏矩阵,并且这通常表明降维可能有所帮助。 满秩与秩亏 一个维度为 m×nm \times nm×n 的矩阵 AAA 被称为具有满秩,如果其秩是根据其维度能达到的最大可能值,即 rank(A)=min(m,n)rank(A) = \min(m, n)rank(A)=min(m,n)。 列满秩: 如果 rank(A)=nrank(A) = nrank(A)=n (需要 m≥nm \ge nm≥n),则列是线性独立的。 行满秩: 如果 rank(A)=mrank(A) = mrank(A)=m (需要 n≥mn \ge mn≥m),则行是线性独立的。 如果 rank(A) 秩亏矩阵意味着其列和行之间存在线性相关性。 对于一个方阵(n×nn \times nn×n),秩亏(rank(A) 秩在机器学习应用中的作用 理解矩阵的秩有助于理解数据结构和模型属性: 特征选择/特征工程: 秩亏的特征矩阵表明一些特征提供了重叠的信息。这可能促使移除特征或使用降维技术(例如PCA,它通过特征值和SVD依赖于秩的观点)来创建一个更紧凑、线性独立的特征集。 系统解的存在性: 正如第3章所见,秩决定了线性系统 Ax=bAx=bAx=b 解的性质。比较 rank(A)rank(A)rank(A) 与 rank([A∣b])rank([A|b])rank([A∣b])(增广矩阵)说明一个系统是否一致(有解)。比较 rank(A)rank(A)rank(A) 与变量数量说明一个一致系统是具有唯一解还是无限多解。这对于求解线性回归等模型中的参数十分重要。 模型可识别性: 在一些统计模型中,设计矩阵的秩亏可能导致参数不可识别,这意味着无法仅凭数据确定唯一的参数估计值。 矩阵分解: 像非负矩阵分解(NMF)或推荐系统中使用的技术,通常假设或寻求数据矩阵的低秩近似,明确地运用秩的观点来捕捉最显著的潜在模式。 总而言之,矩阵的秩是一个包含重要信息的简单数值。它量化了行和列中线性独立的程度,决定了基本子空间的维度,并对求解线性系统、理解数据冗余以及评估机器学习模型的属性有直接影响。当我们学习到像SVD这样的矩阵分解时,秩的观点将再次成为核心内容。