news 2026/4/16 12:26:23

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
人工智能之数学基础 线性代数:第三章 特征值与特征向量

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

第三章 特征值与特征向量


文章目录

  • 人工智能之数学基础 线性代数
  • 前言
  • 一、定义
  • 二、几何与物理意义
    • 1. 几何解释(线性变换视角)
    • 2. 物理意义举例
  • 三、数学推导:如何求特征值与特征向量?
      • 步骤总结:
    • 四、重要性质
  • 五、Python 代码实现
    • 1. 基础计算:`numpy.linalg.eig`
    • 2. 对称矩阵:使用 `eigh`(更高效稳定)
    • 3. 可视化:2D 线性变换与特征向量
    • 4. 应用示例:主成分分析(PCA)核心
  • 六、数值计算注意事项
    • 七、总结
  • 后续
  • 资料关注

前言

特征值(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) = 0det(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

importnumpyasnp# 定义一个方阵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 = λvforiinrange(len(eigenvalues)):v=eigenvectors[:,i]Av=A @ v lambda_v=eigenvalues[i]*vprint(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,它保证返回实数特征值,并按升序排列。

# 协方差矩阵(对称正定)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 线性变换与特征向量

importmatplotlib.pyplotaspltdefplot_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')foriinrange(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')foriinrange(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 的本质是:对数据协方差矩阵求特征向量,最大特征值对应的特征向量即第一主成分

# 生成模拟数据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(只求部分特征对)
重复特征值可能无法得到完整特征向量基(缺陷矩阵)
fromscipy.sparse.linalgimporteigs# 大型稀疏矩阵(示例)fromscipy.sparseimportrandom A_sparse=random(1000,1000,density=0.01)# 求最大的 5 个特征值/向量vals,vecs=eigs(A_sparse,k=5,which='LM')# LM = Largest Magnitudeprint("最大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》

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 4:26:51

5、游戏开发中的资产管理器实现与优化

游戏开发中的资产管理器实现与优化 在游戏开发中,有效地管理各种资产(如纹理、声音、文件等)是至关重要的。本文将详细介绍如何创建和优化不同类型的资产管理器,以及如何将它们整合到一个统一的类中。 1. AssetsDictionary 类的使用与优化建议 在游戏类的初始化方法中,…

作者头像 李华
网站建设 2026/4/11 0:21:23

10、游戏开发:从基础逻辑到用户界面搭建

游戏开发:从基础逻辑到用户界面搭建 在游戏开发过程中,为游戏添加基础逻辑元素和用户界面元素是至关重要的环节。本文将详细介绍如何为游戏添加射击功能、碰撞检测、加载游戏数据以及显示用户界面等内容。 一、添加射击功能 为了让海盗船能够发射炮弹,我们需要进行一系列…

作者头像 李华
网站建设 2026/3/31 6:48:09

11、用户界面开发指南:游戏暂停、退出与对话框功能实现

用户界面开发指南:游戏暂停、退出与对话框功能实现 1. 游戏中的血条显示 在游戏运行中,我们能看到我方船只和敌方船只上方都有血条显示。当船只移动时,血条会随之移动;当我方攻击敌方船只时,敌方血条会相应更新。 2. 为屏幕添加按钮 现在屏幕上已有血条,我们可以添加…

作者头像 李华
网站建设 2026/4/11 19:16:54

【功能全面性对比】最新项目管理软件排行榜及用户评价汇总

本文将聚焦以下10款主流项目管理工具&#xff1a;禅道、ONES、Monday.com、伙伴云、ClickUp、Asana、Trello、Microsoft Project、Jira、广联达PMSmart。重点解析功能全面性、用户口碑、信创适配度及选型逻辑&#xff0c;帮助企业精准匹配需求&#xff0c;实现高效协作。一、最…

作者头像 李华
网站建设 2026/4/15 16:13:28

15、游戏音频与优化:打造沉浸式游戏体验

游戏音频与优化:打造沉浸式游戏体验 在游戏开发过程中,音频和游戏的打磨是提升游戏品质和玩家体验的关键环节。下面将详细介绍如何为游戏添加音频以及对游戏进行优化。 为游戏添加音频 音频能为游戏增添沉浸感和真实感。在为游戏添加音频时,可按以下步骤操作: 1. 为海盗…

作者头像 李华
网站建设 2026/4/16 12:16:40

Rust桌面应用UI框架实战选择指南:GPUI、Iced与egui深度解析

Rust桌面应用UI框架实战选择指南&#xff1a;GPUI、Iced与egui深度解析 【免费下载链接】gpui-component UI components for building fantastic desktop application by using GPUI. 项目地址: https://gitcode.com/GitHub_Trending/gp/gpui-component 在Rust桌面应用开…

作者头像 李华