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

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

第二章 向量空间


文章目录


前言

向量空间(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》

相关推荐
数据皮皮侠AI几秒前
中国城市可再生能源数据集(2005-2021)|顶刊 Sci Data 11 种能源面板
大数据·人工智能·笔记·能源·1024程序员节
G31135422735 分钟前
如何用 QClaw 龙虾做一个规律作息健康助理 Agent
大数据·人工智能·ai·云计算
幂律智能6 分钟前
零售行业合同管理数智化转型解决方案
大数据·人工智能·零售
旺财矿工7 分钟前
零基础搭建 OpenClaw 2.6.6 Win11 本地化运行环境
人工智能·openclaw·小龙虾·龙虾·openclaw安装包
九成宫8 分钟前
动手学深度学习PyTorch版初步安装过程
人工智能·pytorch·深度学习
Traving Yu9 分钟前
Prompt提示词工程
人工智能·prompt
NOCSAH9 分钟前
统好AI CRM功能解析:智能录入与跟进
人工智能
He少年11 分钟前
【AI 辅助编程做设备数据采集:一个真实项目的迭代复盘(OpenSpec 驱动)】
人工智能
华万通信king15 分钟前
WorkBuddy知识库企业级搭建实战:从零到生产级别的完整路径
大数据·人工智能
测试员周周22 分钟前
【AI测试系统】第3篇:AI生成的测试用例太“水”?14年老兵:规则引擎+AI才是王炸组合
人工智能·python·测试