人工智能之数学基础 线性代数:第二章 向量空间

人工智能之数学基础 线性代数

第二章 向量空间


文章目录


前言

向量空间(Vector Space)是线性代数的核心概念之一,它为理解线性变换、特征值、最小二乘法、主成分分析(PCA)等高级主题提供了理论基础。本文将系统介绍向量空间中的关键概念:维度、基、正交性、投影,并提供配套的 Python(NumPy/SciPy)代码实现。


一、向量空间(Vector Space)定义

一个向量空间 V 是一个非空集合,其元素称为向量 ,满足以下公理(对实数域 R \mathbb{R} R 上的向量空间):

  1. 加法封闭性:若 \\mathbf{u}, \\mathbf{v} \\in V ,则 \\mathbf{u} + \\mathbf{v} \\in V
  2. 标量乘法封闭性 :若 \\mathbf{v} \\in V , , , c \\in \\mathbb{R} ,则 ,则 ,则 c\\mathbf{v} \\in V
  3. 加法交换律、结合律,存在零向量,每个向量有加法逆元
  4. 标量乘法与域运算兼容(分配律、结合律等)

最常见的向量空间: R n \mathbb{R}^n Rn ------ 所有 n n n 维实向量的集合。


二、子空间(Subspace)

  • 定义 :向量空间 V V V 的子集 W W W 若本身也构成向量空间(对加法和标量乘法封闭),则称 W W W 为 V V V 的子空间
  • 例子
    • 平面中过原点的直线是 R 2 \mathbb{R}^2 R2 的子空间
    • 矩阵 A A A 的列空间(Column Space)是 R m \mathbb{R}^m Rm 的子空间

三、线性相关与线性无关

  • 线性组合 :向量 v 1 , ... , v k \mathbf{v}_1, \dots, \mathbf{v}_k v1,...,vk 的线性组合为:
    c 1 v 1 + c 2 v 2 + ⋯ + c k v k c_1 \mathbf{v}_1 + c_2 \mathbf{v}_2 + \cdots + c_k \mathbf{v}_k c1v1+c2v2+⋯+ckvk
  • 线性相关 :若存在不全为零的系数 c i c_i ci 使得线性组合为零向量,则这些向量线性相关
  • 线性无关 :只有当所有 c i = 0 c_i = 0 ci=0 时组合才为零向量。

线性无关是构成"基"的前提。


四、基(Basis)与维度(Dimension)

1. 基(Basis)

  • 定义 :向量空间 V V V 的一组向量 { b 1 , ... , b k } \{\mathbf{b}_1, \dots, \mathbf{b}_k\} {b1,...,bk} 称为 V V V的 ,如果:
    1. 它们线性无关
    2. 它们能张成 (span)整个空间 V V V,即 V V V 中任意向量都可表示为它们的线性组合

例如: R 3 \mathbb{R}^3 R3 的标准基为:

e 1 = [ 1 0 0 ] , e 2 = [ 0 1 0 ] , e 3 = [ 0 0 1 ] \mathbf{e}_1 = \begin{bmatrix}1\\0\\0\end{bmatrix}, \mathbf{e}_2 = \begin{bmatrix}0\\1\\0\end{bmatrix}, \mathbf{e}_3 = \begin{bmatrix}0\\0\\1\end{bmatrix} e1= 100 ,e2= 010 ,e3= 001

2. 维度(Dimension)

  • 向量空间 V V V 的维度 dim ⁡ ( V ) \dim(V) dim(V) 是其任意一组基中向量的个数。
  • 所有基的大小相同(定理)。

例: R n \mathbb{R}^n Rn 的维度为 n n n;平面中过原点的直线维度为 1。

Python 实现:判断线性无关 & 求秩(维度)

python 复制代码
import numpy as np
from scipy.linalg import qr

# 构造矩阵,每列为一个向量
V = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]], dtype=float)  # 注意:这组向量线性相关!

# 方法1:通过矩阵秩判断
rank = np.linalg.matrix_rank(V)
print("矩阵秩(即列空间维度):", rank)

# 方法2:QR分解(Q的列是正交基)
Q, R = qr(V)
# 非零对角元个数 = 秩
nonzero_diag = np.sum(np.abs(np.diag(R)) > 1e-10)
print("QR分解得到的秩:", nonzero_diag)

# 若 rank == 列数 → 线性无关
if rank == V.shape[1]:
    print("向量组线性无关")
else:
    print("向量组线性相关")

五、正交性(Orthogonality)

1. 正交向量

  • 两个向量 u , v \mathbf{u}, \mathbf{v} u,v 正交 (orthogonal)当且仅当它们的点积为零:
    u ⋅ v = u T v = 0 \mathbf{u} \cdot \mathbf{v} = \mathbf{u}^T \mathbf{v} = 0 u⋅v=uTv=0

2. 正交集与标准正交基(Orthonormal Basis)

  • 正交集:集合中任意两个不同向量都正交。
  • 标准正交基:正交集 + 每个向量长度为 1(单位向量)。

优点:在标准正交基下,坐标计算简单,投影公式简洁。

3. Gram-Schmidt 正交化

将一组线性无关向量转化为正交(或标准正交)基的过程。

Python 实现(使用 QR 分解)

python 复制代码
import numpy as np
from scipy.linalg import qr

# 原始线性无关向量(每列为一个向量)
A = np.array([[1, 1],
              [1, 0],
              [0, 1]], dtype=float)

# QR 分解:A = Q R,其中 Q 的列是标准正交基
Q, R = qr(A, mode='economic')  # economic: Q 形状与 A 相同

print("原始向量(列):\n", A)
print("标准正交基 Q:\n", Q)
print("验证 Q^T Q = I:\n", np.round(Q.T @ Q, decimals=10))

qr 函数内部实现了改进的 Gram-Schmidt 或 Householder 反射,数值更稳定。


六、投影(Projection)

1. 向量到向量的投影

  • 将向量 b \mathbf{b} b投影到非零向量 a \mathbf{a} a 上:
    proj a b = a T b a T a a \text{proj}_{\mathbf{a}} \mathbf{b} = \frac{\mathbf{a}^T \mathbf{b}}{\mathbf{a}^T \mathbf{a}} \mathbf{a} projab=aTaaTba

2. 向量到子空间的投影

  • 设子空间 W = Col ( A ) W = \text{Col}(A) W=Col(A)(由矩阵 A A A 的列张成),则 b \mathbf{b} b在 W W W 上的投影 b ^ \hat{\mathbf{b}} b^ 满足:
    b ^ = A x , 其中 x 是 A T A x = A T b 的解 \hat{\mathbf{b}} = A \mathbf{x}, \quad \text{其中 } \mathbf{x} \text{ 是 } A^T A \mathbf{x} = A^T \mathbf{b} \text{ 的解} b^=Ax,其中 x 是 ATAx=ATb 的解
  • 这就是最小二乘解 !投影误差 b − b ^ \mathbf{b} - \hat{\mathbf{b}} b−b^ 与子空间正交。

Python 实现

python 复制代码
import numpy as np

# 子空间由 A 的列张成
A = np.array([[1, 1],
              [1, 0],
              [0, 1]], dtype=float)
b = np.array([2, 1, 3], dtype=float)

# 方法1:使用正规方程 (Normal Equation)
x = np.linalg.solve(A.T @ A, A.T @ b)
proj_b = A @ x

# 方法2:使用 lstsq(更稳定)
x2, residuals, rank, s = np.linalg.lstsq(A, b, rcond=None)
proj_b2 = A @ x2

print("原始向量 b:", b)
print("投影到 Col(A):", proj_b)
print("误差向量 (应与 A 的列正交):", b - proj_b)
print("验证正交性 A^T (b - proj_b) ≈ 0:", np.round(A.T @ (b - proj_b), decimals=10))

七、综合示例:构造子空间、求基、正交化、投影

python 复制代码
import numpy as np
from scipy.linalg import qr

# 1. 定义一组生成子空间的向量(可能线性相关)
V = np.array([[1, 2, 3],
              [2, 4, 6],   # 第二行是第一行的2倍 → 相关
              [1, 0, 1]], dtype=float)

# 2. 提取线性无关列(作为基)
rank = np.linalg.matrix_rank(V)
print(f"子空间维度: {rank}")

# 使用 SVD 或 QR 找基
Q, R, P = qr(V, pivoting=True)  # pivoting 返回列置换
basis_indices = P[:rank]
basis = V[:, basis_indices]
print("选出的基(线性无关列):\n", basis)

# 3. 对基进行标准正交化
Q_basis, _ = qr(basis, mode='economic')
print("标准正交基:\n", Q_basis)

# 4. 投影一个新向量到该子空间
b = np.array([5, 6, 7], dtype=float)
proj = Q_basis @ (Q_basis.T @ b)  # 因为 Q 是标准正交基,投影公式简化为 Q Q^T b
print("b =", b)
print("投影到子空间 =", proj)
print("投影误差 =", b - proj)
print("验证误差与子空间正交:", np.round(Q_basis.T @ (b - proj), decimals=10))

八、关键概念总结表

概念 数学描述 Python 工具
向量空间 对加法和标量乘法封闭的集合 ---
子空间 向量空间的子集,自身也是向量空间 列空间 np.linalg.matrix_rank(A)
线性无关且张成空间的向量组 QR 分解、SVD
维度 基中向量的个数 np.linalg.matrix_rank
正交性 u T v = 0 \mathbf{u}^T \mathbf{v} = 0 uTv=0 np.dot(u, v)
标准正交基 正交 + 单位长度 scipy.linalg.qr
投影到子空间 b ^ = A ( A T A ) − 1 A T b \hat{\mathbf{b}} = A(A^T A)^{-1} A^T \mathbf{b} b^=A(ATA)−1ATb np.linalg.lstsqQ @ (Q.T @ b)

九、应用场景

  • 机器学习:PCA 使用标准正交基降维
  • 计算机图形学:投影用于 3D → 2D 渲染
  • 信号处理:将信号投影到傅里叶基上
  • 数值分析:最小二乘拟合本质是投影

掌握向量空间的结构(基、维度)、正交性与投影,是理解现代数据科学与工程算法的基石。建议结合几何直观(如 R 2 , R 3 \mathbb{R}^2, \mathbb{R}^3 R2,R3 中的平面、直线)加深理解,并多用代码验证理论。

后续

python过渡项目部分代码已经上传至gitee,后续会逐步更新。

资料关注

公众号:咚咚王

gitee:https://gitee.com/wy18585051844/ai_learning

《Python编程:从入门到实践》

《利用Python进行数据分析》

《算法导论中文第三版》

《概率论与数理统计(第四版) (盛骤) 》

《程序员的数学》

《线性代数应该这样学第3版》

《微积分和数学分析引论》

《(西瓜书)周志华-机器学习》

《TensorFlow机器学习实战指南》

《Sklearn与TensorFlow机器学习实用指南》

《模式识别(第四版)》

《深度学习 deep learning》伊恩·古德费洛著 花书

《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》

《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》

《自然语言处理综论 第2版》

《Natural-Language-Processing-with-PyTorch》

《计算机视觉-算法与应用(中文版)》

《Learning OpenCV 4》

《AIGC:智能创作时代》杜雨+&+张孜铭

《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》

《从零构建大语言模型(中文版)》

《实战AI大模型》

《AI 3.0》

相关推荐
skywalk81632 小时前
SCNet 双DCU异构卡vllm推理部署DeepSeek-Coder-V2-Lite-Instruct
人工智能·vllm·scnet·deepseek-coder
元周民2 小时前
非厄米矩阵高精度计算预先判定需要的计算精度(matlab)
线性代数·matlab·矩阵
aesthetician2 小时前
用铜钟听歌,发 SCI !
前端·人工智能·音频
UI设计兰亭妙微2 小时前
告别调度繁琐:北京兰亭妙微拆解货运 APP 的 “轻量高效设计密码”
人工智能·ui设计外包
Mxsoft6192 小时前
采样率设低致频谱混叠!某次谐波分析误判,提高采样率精准定位!
人工智能
有痣青年2 小时前
GPT‑5.2 翻车?GDPval 70.9% 的“基准胜利”为何换不来好口碑?
人工智能·openai·ai编程
平凡之路无尽路3 小时前
智能体设计模式:构建智能系统的实践指南
人工智能·设计模式·自然语言处理·nlp·aigc·vllm
骚戴3 小时前
架构视角:Gemini 3.0 Pro 原生多模态能力的边界与工程落地
人工智能·大模型·llm·api·ai gateway
2401_841495643 小时前
【自然语言处理】汉语语料库建设的深层困境与现实挑战
人工智能·自然语言处理·语料库·标注·汉语语料库·中文信息处理·语料