news 2026/5/1 6:13:48

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

作者头像

张小明

前端开发工程师

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/25 4:30:35

30、系统安全与认证全解析

系统安全与认证全解析 在网络安全领域,保障系统安全是一项至关重要且复杂的任务。下面我们将详细探讨系统安全的多个方面,包括无线网络安全、系统强化包、自动化系统强化以及安全认证等内容。 无线网络安全策略 无线网络的广泛应用带来了便捷,但也带来了安全风险。为了确…

作者头像 李华
网站建设 2026/4/18 9:18:29

3、基于Sparrow框架的游戏开发入门指南

基于Sparrow框架的游戏开发入门指南 1. 开发环境准备与文档集成 在开始使用Sparrow进行游戏开发前,我们需要完成一些基础的准备工作,包括将应用配置到真机运行以及集成Sparrow的文档。 - 真机运行配置 :将设备连接到Mac,并把构建配置设置为该设备,这样应用就能在真机…

作者头像 李华
网站建设 2026/4/6 10:59:15

PaddlePaddle工业级模型库应用:借助git下载最新开源项目案例

PaddlePaddle工业级模型库应用&#xff1a;借助Git高效落地开源AI项目 在当前AI技术加速向产业渗透的背景下&#xff0c;如何快速将前沿算法转化为可运行、可部署的工业级系统&#xff0c;已成为企业构建智能能力的核心挑战。尤其是在中文自然语言处理、文档识别、视觉检测等场…

作者头像 李华
网站建设 2026/5/1 3:31:00

13、游戏中的人工智能与进度系统实现

游戏中的人工智能与进度系统实现 1. 让敌舰移动和攻击 在游戏开发中,我们可以利用模糊逻辑和状态机来实现人工智能机制,首先要让敌舰能够移动,包括随机移动和向玩家舰船移动。 1.1 让敌舰移动的步骤 若Xcode项目未打开,则打开它。 打开 Battlefield.h 文件。 定义所…

作者头像 李华
网站建设 2026/4/30 8:46:02

为什么你的useEffect总是出bug?一文讲清楚依赖数组的坑

你是不是遇到过这样的问题&#xff1a;明明把某个值放进了state里&#xff0c;但在effect里拿到的还是旧值一个定时器反复启动、停止&#xff0c;代码看起来没毛病埋点数据在测试环境正常&#xff0c;上线就乱套了某个功能在本地好用&#xff0c;用户那边却数据混乱如果是&…

作者头像 李华
网站建设 2026/4/30 2:50:03

Wechaty新版发布:3大黑科技让聊天机器人开发效率飙升300%

Wechaty新版发布&#xff1a;3大黑科技让聊天机器人开发效率飙升300% 【免费下载链接】wechaty 项目地址: https://gitcode.com/gh_mirrors/wec/wechaty 还在为聊天机器人开发中的繁琐配置和复杂逻辑头疼吗&#xff1f;&#x1f914; 每天花费数小时调试协议兼容性&…

作者头像 李华