人工智能之数学基础 线性代数:第三章 特征值与特征向量

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

第三章 特征值与特征向量


文章目录


前言

特征值(Eigenvalues)和特征向量(Eigenvectors)是线性代数中最具洞察力的概念之一,广泛应用于主成分分析(PCA)稳定性分析振动模态图神经网络PageRank算法 等领域。本文将从定义、计算方法、几何/物理意义 出发,并提供完整的 Python 代码实现


一、定义

A \\in \\mathbb{R}\^{n \\times n} 是一个 方阵 。若存在一个非零向量 \\mathbf{v} \\in \\mathbb{R}\^n 和一个标量 \\lambda \\in \\mathbb{R} (或 \\mathbb{C} ),使得:

A v = λ v A \mathbf{v} = \lambda \mathbf{v} Av=λv

则称:

  • \\lambda 为矩阵 A 的一个 特征值(eigenvalue)
  • \\mathbf{v} 为对应于 \\lambda 特征向量(eigenvector)

注意:特征向量不能是零向量;但特征值可以为 0。


二、几何与物理意义

1. 几何解释(线性变换视角)

  • 矩阵 A 表示一个线性变换(如旋转、拉伸、剪切等)。
  • 特征向量是那些在变换后方向不变(或反向)的向量;
  • 特征值表示该方向上的伸缩比例
    • \|\\lambda\| \> 1 :拉伸
    • \|\\lambda\| \< 1 :压缩
    • \\lambda \< 0 :反向
    • \\lambda = 1 :不变

例如:对角矩阵

A = [ 3 0 0 2 ] A = \begin{bmatrix} 3 & 0 \\ 0 & 2 \end{bmatrix} A=[3002]

的特征向量是坐标轴方向,特征值分别是 3 和 2 ------ 沿 x 轴拉伸 3 倍,y 轴拉伸 2 倍。

2. 物理意义举例

领域 应用
力学 振动系统的固有频率(特征值)与振型(特征向量)
量子力学 哈密顿算符的本征态与能量
图论 图的拉普拉斯矩阵的特征值反映连通性(谱聚类)
机器学习 PCA 中协方差矩阵的特征向量 = 主成分方向

三、数学推导:如何求特征值与特征向量?

从定义出发:

A v = λ v ⇒ ( A − λ I ) v = 0 A \mathbf{v} = \lambda \mathbf{v} \Rightarrow (A - \lambda I) \mathbf{v} = \mathbf{0} Av=λv⇒(A−λI)v=0

要使非零解 \\mathbf{v} \\ne \\mathbf{0} 存在,系数矩阵必须奇异(不可逆),即:

det ⁡ ( A − λ I ) = 0 \det(A - \lambda I) = 0 det(A−λI)=0

这个关于 \\lambda 的多项式方程称为 特征方程(Characteristic Equation),其根即为所有特征值。

步骤总结:

  1. 计算特征多项式: p(\\lambda) = \\det(A - \\lambda I)
  2. 解方程 p(\\lambda) = 0 得到特征值 \\lambda_1, \\dots, \\lambda_n
  3. 对每个 \\lambda_i ,解齐次线性方程组 (A - \\lambda_i I)\\mathbf{v} = \\mathbf{0} 得到特征向量

注: n \\times n 矩阵最多有 n 个线性无关的特征向量。


四、重要性质

性质 说明
迹(Trace) \\text{tr}(A) = \\sum \\lambda_i
行列式 \\det(A) = \\prod \\lambda_i
可对角化 A n 个线性无关的特征向量,则 A = PDP\^{-1} ,其中 D 为对角矩阵(对角元为特征值)
对称矩阵 实对称矩阵的特征值为实数,且存在标准正交特征向量基
正定矩阵 所有特征值 > 0

五、Python 代码实现


1. 基础计算:numpy.linalg.eig

python 复制代码
import numpy as np

# 定义一个方阵
A = np.array([[4, 2],
              [1, 3]], dtype=float)

# 计算特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(A)

print("矩阵 A:\n", A)
print("\n特征值 λ:", eigenvalues)
print("\n特征向量(每列为一个特征向量):\n", eigenvectors)

# 验证 Av = λv
for i in range(len(eigenvalues)):
    v = eigenvectors[:, i]
    Av = A @ v
    lambda_v = eigenvalues[i] * v
    print(f"\n验证第 {i+1} 个特征对:")
    print("A v =", Av)
    print("λ v =", lambda_v)
    print("误差范数:", np.linalg.norm(Av - lambda_v))

输出示例:

复制代码
特征值 λ: [5. 2.]
特征向量:
[[ 0.89442719 -0.70710678]
 [ 0.4472136   0.70710678]]

2. 对称矩阵:使用 eigh(更高效稳定)

对于实对称矩阵 (如协方差矩阵),推荐使用 np.linalg.eigh,它保证返回实数特征值,并按升序排列。

python 复制代码
# 协方差矩阵(对称正定)
C = np.array([[2, 1],
              [1, 2]], dtype=float)

eigvals, eigvecs = np.linalg.eigh(C)  # 'h' 表示 Hermitian(对称)

print("特征值(升序):", eigvals)
print("标准正交特征向量:\n", eigvecs)
print("验证正交性 Q^T Q = I:\n", np.round(eigvecs.T @ eigvecs, 10))

3. 可视化:2D 线性变换与特征向量

python 复制代码
import matplotlib.pyplot as plt

def plot_eigenvectors(A):
    vals, vecs = np.linalg.eig(A)
    
    # 创建网格点
    x = np.linspace(-2, 2, 10)
    y = np.linspace(-2, 2, 10)
    X, Y = np.meshgrid(x, y)
    points = np.vstack([X.ravel(), Y.ravel()])
    
    # 应用变换
    transformed = A @ points
    
    plt.figure(figsize=(10, 4))
    
    # 原始空间
    plt.subplot(1, 2, 1)
    plt.quiver(points[0], points[1], 
               np.zeros_like(points[0]), np.zeros_like(points[1]),
               angles='xy', scale_units='xy', scale=1, color='lightgray')
    for i in range(vecs.shape[1]):
        v = vecs[:, i]
        plt.arrow(0, 0, v[0], v[1], 
                  head_width=0.1, color='red', linewidth=2, label=f'v{i+1}')
    plt.title('原始空间(特征向量 in red)')
    plt.axis('equal')
    plt.grid(True)
    
    # 变换后空间
    plt.subplot(1, 2, 2)
    plt.quiver(transformed[0], transformed[1],
               np.zeros_like(transformed[0]), np.zeros_like(transformed[1]),
               angles='xy', scale_units='xy', scale=1, color='lightgray')
    for i in range(vecs.shape[1]):
        v = vecs[:, i]
        Av = A @ v
        plt.arrow(0, 0, Av[0], Av[1], 
                  head_width=0.1, color='blue', linewidth=2, label=f'A v{i+1}')
    plt.title('变换后空间(Av in blue)')
    plt.axis('equal')
    plt.grid(True)
    
    plt.tight_layout()
    plt.show()

# 示例矩阵
A = np.array([[3, 1],
              [0, 2]])
plot_eigenvectors(A)

红色特征向量在变换后(蓝色)仍在同一直线上,仅长度变化!


4. 应用示例:主成分分析(PCA)核心

PCA 的本质是:对数据协方差矩阵求特征向量,最大特征值对应的特征向量即第一主成分

python 复制代码
# 生成模拟数据
np.random.seed(0)
X = np.random.randn(100, 2) @ np.array([[3, 1], [1, 1]])  # 椭圆分布

# 中心化
X_centered = X - X.mean(axis=0)

# 计算协方差矩阵
C = np.cov(X_centered, rowvar=False)

# 求特征值/向量
eigvals, eigvecs = np.linalg.eigh(C)

# 按特征值降序排序
idx = np.argsort(eigvals)[::-1]
eigvals = eigvals[idx]
eigvecs = eigvecs[:, idx]

print("协方差矩阵特征值:", eigvals)
print("第一主成分方向:", eigvecs[:, 0])

# 可视化
plt.scatter(X_centered[:, 0], X_centered[:, 1], alpha=0.6)
origin = [0, 0]
plt.quiver(*origin, *eigvecs[:, 0] * np.sqrt(eigvals[0]), 
           color='r', scale=3, label='PC1')
plt.quiver(*origin, *eigvecs[:, 1] * np.sqrt(eigvals[1]), 
           color='g', scale=3, label='PC2')
plt.legend()
plt.title('PCA: 主成分(特征向量)')
plt.axis('equal')
plt.grid(True)
plt.show()

六、数值计算注意事项

问题 建议
非对称矩阵 使用 eig,但特征值可能是复数
病态矩阵 特征值对扰动敏感,可用 SVD 替代
大型稀疏矩阵 使用 scipy.sparse.linalg.eigs(只求部分特征对)
重复特征值 可能无法得到完整特征向量基(缺陷矩阵)
python 复制代码
from scipy.sparse.linalg import eigs

# 大型稀疏矩阵(示例)
from scipy.sparse import random
A_sparse = random(1000, 1000, density=0.01)

# 求最大的 5 个特征值/向量
vals, vecs = eigs(A_sparse, k=5, which='LM')  # LM = Largest Magnitude
print("最大5个特征值:", vals)

七、总结

概念 核心思想
特征值/向量 线性变换中"不变方向"及其伸缩因子
计算 \\det(A - \\lambda I) = 0 ,再解齐次方程
对称矩阵 特征值为实数,特征向量正交 → 可用于 PCA、谱聚类
应用 降维、稳定性分析、振动模态、PageRank、量子力学等

💡 记住:特征分解揭示了矩阵的"内在结构"。当你看到一个线性系统,问自己:"它的特征方向是什么?"------答案往往指向最本质的行为。

后续

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》

相关推荐
g***B7384 小时前
Java 工程复杂性的真正来源:从语言设计到现代架构的全链路解析
java·人工智能·架构
Shawn_Shawn7 小时前
大模型的奥秘:Token与Transformer简单理解
人工智能·llm
weixin_377634848 小时前
【K-S 检验】Kolmogorov–Smirnov计算过程与示例
人工智能·深度学习·机器学习
菜鸟起航ing9 小时前
Spring AI 全方位指南:从基础入门到高级实战
java·人工智能·spring
Guheyunyi9 小时前
智慧消防管理系统如何重塑安全未来
大数据·运维·服务器·人工智能·安全
ZZY_dl9 小时前
训练数据集(三):真实场景下采集的课堂行为目标检测数据集,可直接用于YOLO各版本训练
人工智能·yolo·目标检测
yiersansiwu123d9 小时前
AI伦理治理:在创新与规范之间寻找动态平衡
人工智能
华清远见成都中心10 小时前
成都理工大学&华清远见成都中心实训,助力电商人才培养
大数据·人工智能·嵌入式
鲨莎分不晴10 小时前
强化学习第五课 —— A2C & A3C:并行化是如何杀死经验回放
网络·算法·机器学习