【老计带你懂线性代数】09:特征值与特征向量,矩阵最本质的方向

开头:矩阵也有它的"脾气"
从这一篇开始,我们进入线性代数里最有魔力、也是AI最倚重的部分。特征值和特征向量,名字听着吓人,但它抓住的东西极其深刻,一个矩阵(变换)最本质的性格,藏在它的特征值和特征向量里。
PCA降维靠它、谷歌的PageRank靠它、很多AI里的谱方法、稳定性分析都靠它。可以说,理解了特征值和特征向量,你就拿到了打开AI很多核心算法的钥匙。这一篇不堆公式,用几何直觉把它讲透。
一个变换里的"特殊方向"

回忆第06篇,一个矩阵就是对空间的一次变换(旋转、缩放、拉扯)。变换发生时,空间里绝大多数向量,方向都会被改变,它们被转向了别处。
但是,有那么几个特殊的方向,变换之后方向纹丝不动,只是被拉长或缩短了。这些方向上的向量,就是特征向量;被拉长或缩短的倍数,就是特征值。
用大白话说:特征向量是这个变换的"骨干方向",变换再怎么折腾整个空间,这几个方向始终指着原来的朝向(或恰好反向),只是长度变了。特征值告诉你,在这个骨干方向上,变换到底是拉伸(大于1)、压缩(0到1之间)、还是翻转(负数)。
打个比方:想象你揉捏一块橡皮泥(变换空间),大部分纹路都被揉得改变了方向,乱成一团。但有几条特殊的纹路,你怎么揉,它们始终指着原来的方向,只是变长了或变短了。这几条"打不弯"的纹路,就是特征向量;它们各自变长变短的倍数,就是特征值。它们是这次揉捏动作骨子里的主方向。
这里要打消一个顾虑:怎么求出特征值和特征向量,你完全不用手算。 手工求解要解一个叫特征方程的东西,几阶以上就非常繁琐,那是数学课折磨人的地方。但在AI和工程里,这活儿百分之百交给计算机,NumPy一行 np.linalg.eig 就把所有特征值特征向量给你算出来了,又快又准。你要掌握的不是怎么算,而是算出来的东西是什么意思、能拿来干什么。 这也是这个系列一贯的立场,理解直觉和用途,把计算交给工具。就像你开车不需要会造发动机,用特征值不需要会手工求解。抓住"方向不变、只被缩放的主方向"这个含义,知道它能帮你找出数据或变换的主结构,会用NumPy求出来并解读,对搞AI的人就完全够用了。真正重要的,是下一篇要讲的,怎么把它用到降维上,让这个抽象工具变成实实在在的本领。
为什么它揭示了矩阵的本质
为什么说特征向量特征值抓住了矩阵的本质?因为它们把一个复杂的变换,拆解成了几个最简单的动作,在几个特定方向上的纯拉伸缩放。
一个矩阵作用在空间上,看起来又转又拉、很复杂。但如果你站在它的特征向量方向上看,一切都变得极简,在这些方向上,变换什么花样都没有,就是单纯地按特征值倍数拉伸。特征向量给了我们一副"看穿"这个变换的眼镜,透过它,复杂的变换现出了最朴素的本来面目。
而且,特征值的大小,直接告诉你哪个方向是这个变换里最"重要"、影响最大的方向。特征值最大的那个特征向量,是变换拉伸得最狠的方向,往往就是数据里信息最集中、最主要的方向。 这一点是PCA的直接基础,下一篇会看到,找数据里方差最大的主方向,就是找协方差矩阵最大特征值对应的特征向量。
一个生活化的例子:找到人群的主方向

为了让特征向量特征值更接地气,举个数据分析的画面。想象一堆人的身高体重数据,画成散点图。你会发现这堆点大致沿着一个方向拉成一个椭圆,因为身高和体重是正相关的,高的人往往也重。
这堆数据的分布,可以用一个矩阵(协方差矩阵)来描述。而这个矩阵的特征向量,恰好指向数据散布的主方向和次方向。 最大特征值对应的特征向量,指向椭圆的长轴,也就是数据变化最大、最主要的方向(身高体重一起增长的那个综合趋势);小特征值对应的特征向量指向短轴,是次要的、变化小的方向。
看,特征向量帮我们从一堆杂乱的点里,自动找出了它们分布的骨架方向。 这正是它在数据分析里的核心价值,从数据里提取出最主要的变化方向。你如果只想用一个数字概括每个人(降到一维),最好的办法就是把他们投影到那条长轴(最大特征向量)上,这个投影保留了最多的信息。这,就是下一篇PCA的核心思想,而它的引擎正是特征值和特征向量。理解了这个画面,PCA对你就不再是黑箱。
输入和输出长什么样
- 输入:一个方阵(特征值特征向量只对方阵有定义)。
- 输出:一组特征值(每个是一个数)和对应的一组特征向量(每个是一个向量)。一个n乘n的矩阵通常有n个特征值和特征向量。
- NumPy里用
np.linalg.eig一次求出所有特征值和特征向量。
上代码:找出矩阵的特征值和特征向量
python
# 依赖:pip install numpy
import numpy as np
# 一个变换矩阵
A = np.array([[2, 0],
[0, 3]])
# 这个对角矩阵含义:横方向拉2倍、纵方向拉3倍
# 直觉上,横轴和纵轴就是它的特征方向,特征值分别是2和3
eigenvalues, eigenvectors = np.linalg.eig(A)
print("特征值:", eigenvalues) # [2. 3.]
print("特征向量(每一列是一个):\n", eigenvectors)
# 验证特征向量的定义:矩阵乘特征向量 = 特征值乘特征向量(方向不变,只缩放)
v = eigenvectors[:, 1] # 取第二个特征向量
print("\n验证第二个特征向量:")
print(" A乘v =", A @ v)
print(" 特征值乘v =", eigenvalues[1] * v)
print(" 两者相等,说明A作用在v上只是把它拉长了,方向没变")
# 一个更一般的矩阵(不是对角的),特征方向就没那么显然了
B = np.array([[2, 1],
[1, 2]])
vals, vecs = np.linalg.eig(B)
print("\n矩阵B的特征值:", np.round(vals, 3)) # [3. 1.]
print("B的特征向量:\n", np.round(vecs, 3))
print("最大特征值3对应的方向,是B拉伸得最狠、最主要的方向")
# 对比:一个普通向量会被改变方向
u = np.array([1, 0])
print("\n普通向量[1,0]经B变换后:", B @ u, "(方向被改变了,不是特征向量)")
运行输出(示例):
text
特征值: [2. 3.]
特征向量(每一列是一个):
[[1. 0.]
[0. 1.]]
验证第二个特征向量:
A乘v = [0. 3.]
特征值乘v = [0. 3.]
两者相等,说明A作用在v上只是把它拉长了,方向没变
矩阵B的特征值: [3. 1.]
B的特征向量:
[[ 0.707 -0.707]
[ 0.707 0.707]]
最大特征值3对应的方向,是B拉伸得最狠、最主要的方向
普通向量[1,0]经B变换后: [2 1] (方向被改变了,不是特征向量)
运行你会看到:对角矩阵A的特征值就是2和3(横纵方向的拉伸倍数)、特征向量就是横轴纵轴;验证了A乘特征向量等于特征值乘特征向量(方向不变只缩放);矩阵B的特征值是3和1,最大特征值3对应的方向是它拉伸最狠的主方向;而普通向量1,0经B变换后方向改变了,说明它不是特征向量。核心就是那个验证:特征向量经过变换,方向不变、只被按特征值缩放,这就是它的定义。
在AI里怎么用
特征值特征向量是AI里一批核心算法的共同基石:
- PCA降维:数据协方差矩阵的特征向量就是主成分,特征值大的方向就是方差大、信息多的方向,第10篇会彻底讲透,呼应《老计带你懂AI算法》的PCA篇。
- PageRank(谷歌搜索的起家算法):把网页链接关系写成矩阵,它的主特征向量就给出了每个网页的重要性排名。特征向量在这里成了"谁最重要"的答案。
- 谱聚类:用矩阵的特征向量来做聚类,处理复杂形状的数据。
- 稳定性与动力学分析:特征值的大小决定一个系统是收敛还是发散,在优化、循环网络的稳定性里有用。
一句话,凡是要找一个矩阵或一堆数据里最主要、最本质的方向,基本都会用到特征值和特征向量。 它是从数据里提取主结构的通用工具。
这里补一个对PCA很关键的知识点,对称矩阵的特征向量特别好、特别听话。 什么是对称矩阵?就是沿对角线翻折后和自己一样的方阵。AI里一个极重要的矩阵,数据的协方差矩阵(描述各特征之间怎么一起变化的),恰好就是对称矩阵。对称矩阵有两个漂亮性质:它的特征值一定是实数(不会冒出复数来添乱),而且不同特征值对应的特征向量互相垂直(正交)。 互相垂直意味着这些主方向彼此独立、不重叠,正好可以当作一组理想的新坐标轴。
打个比方,对称矩阵的特征向量,就像给数据量身定做的一套横平竖直、互不干涉的新坐标系。 这为什么重要?因为下一篇的PCA,正是要给数据换一套更好的坐标系(还记得第07篇说的换基吗),而协方差矩阵是对称的,保证了PCA找出的那些主成分方向天然互相垂直、干净利落,用起来毫无后顾之忧。你现在不用深究,只要记住协方差矩阵是对称的、它的特征向量正交又是实数,这是PCA能优雅工作的数学保障。 这个铺垫,会让你下一篇看PCA时格外顺畅。
常见误区
- 特征值特征向量只对方阵有定义,长方形矩阵没有(但有下下篇讲的奇异值,是它的推广)。
- 特征向量的长度不重要,方向才重要,NumPy给出的是长度归一化的版本,你也可以随意缩放它,还是特征向量。
- 不是所有方阵都有实数特征值(比如纯旋转矩阵的特征值是复数,因为旋转没有方向不变的实向量),但AI里常用的对称矩阵(如协方差矩阵)一定有实特征值,不用担心。
- 别被名字劝退:抓住"变换中方向不变、只被缩放的特殊方向"这一个画面,就够用了。
小结与承上启下
- 特征向量:变换中方向纹丝不动、只被拉伸缩短的特殊方向,是变换的骨干方向。
- 特征值:对应特征向量被拉伸缩短的倍数,正是拉伸、负是翻转、绝对值是缩放程度。
- 为什么重要:它把复杂变换拆成几个方向上的纯缩放,揭示矩阵本质;特征值最大的方向是最主要的方向。
- AI应用:PCA、PageRank、谱聚类、稳定性分析的共同基石,用来提取数据的主结构。
我们知道了特征值特征向量能找出矩阵的主方向。下一篇就把它用起来,讲特征分解与PCA,看数据协方差矩阵的特征向量怎么就成了主成分,把降维这件事从线代的根上彻底讲透,和前面两个系列的PCA彻底打通。
我们下一篇见。
延伸阅读
- 3Blue1Brown《线性代数的本质》:特征值与特征向量(这一集的几何讲解堪称经典):https://www.3blue1brown.com/topics/linear-algebra
- NumPy 官方文档:np.linalg.eig:https://numpy.org/doc/stable/reference/generated/numpy.linalg.eig.html
- PageRank 与特征向量的关系可按关键词PageRank eigenvector检索
(说明:以上为官方与经典公开资料地址,可能随版本调整,如打不开可用标题搜索。)