特征值与特征向量 -- 矩阵的指纹
矩阵作用于大多数向量时,会同时改变其方向和长度。
但总有一些「特殊方向」上的向量,矩阵作用后方向不变,只改变长度。这些就是特征向量,缩放倍数就是特征值。
核心公式:\( A\mathbf{v} = \lambda \mathbf{v} \)
- \( \mathbf{v} \):特征向量(非零),方向在变换后保持不变
- \( \lambda \):特征值,表示 v 被拉伸的倍数
λ > 0
正向拉伸/缩短
方向保持不变
λ < 0
反向拉伸/缩短
方向完全反转
n×n 矩阵最多有 n 个线性无关的特征向量。
对称矩阵的特征值一定是实数——这是对称矩阵如此重要的原因之一。
生活例子
橡皮膜拉伸
一张橡皮膜,水平方向拉伸 2 倍,垂直方向保持不变。
水平方向上的箭头(如 (1,0))被拉伸到 (2,0),但方向不变——它是特征向量,λ=2。
垂直方向上的箭头(如 (0,1))完全不变——它也是特征向量,λ=1。
倾斜的箭头(如 (1,1))方向改变了——它不是特征向量。
数学定义
\[ A\mathbf{v} = \lambda \mathbf{v} \quad \Leftrightarrow \quad (A - \lambda I)\mathbf{v} = 0 \]非零解存在的条件:\( \det(A - \lambda I) = 0 \)(特征方程)。
Python 动手实践
实例
A = np.array([[2, 0], [0, 1]]) # 水平拉伸2倍,垂直不变
eigenvalues, eigenvectors = np.linalg.eig(A)
print("特征值:", eigenvalues) # [2. 1.]
print("特征向量 (列):\n", eigenvectors)
# 验证 Av = λv
for i in range(2):
v = eigenvectors[:, i]
lam = eigenvalues[i]
print(f"\n验证特征向量{i+1}:")
print(f" A @ v = {A @ v}")
print(f" λ * v = {lam * v}")
print(f" 相等: {np.allclose(A @ v, lam * v)}")
# 对称矩阵的特征值全实数
S = np.array([[1, 4], [4, 2]])
print(f"\n对称矩阵 S 的特征值: {np.linalg.eigvals(S)}(全实数)")
特征值: [2. 1.] 特征向量 (列): [[1. 0.] [0. 1.]] 验证特征向量1: A@v=[2. 0.], λv=[2. 0.], 相等: True 对称矩阵 S 的特征值: [ 5. -2.](全实数)
交互式特征向量演示
拖动蓝色向量 v,观察矩阵 A = [[2,0],[0,1]] 对其的变换 Av(红色虚线)。
当 v 在水平或垂直方向时,Av 与 v 共线——这就是特征向量方向:
AI 中的应用场景
PCA 降维
计算数据协方差矩阵的特征值和特征向量。最大的 k 个特征值对应的特征向量就是数据方差最大的 k 个方向(主成分)。将数据投影到这些方向上,方差小的方向被丢弃,实现降维。从 784 维的 MNIST 图像降到 50 维,仍能保留约 90% 的信息。
谱归一化(Spectral Normalization)
在 GAN 训练中,判别器的权重矩阵每步做谱归一化:W ← W / \sigma_{max}(W),其中 \sigma_{max} 是最大的奇异值(方阵时 = 最大特征值的绝对值)。这确保判别器是 1-Lipschitz 的,稳定训练、减少模式崩塌。
图神经网络的谱方法
图拉普拉斯矩阵 L = D - A(D 是度对角矩阵,A 是邻接矩阵)的特征值和特征向量定义了图上的傅里叶变换。GCN(图卷积网络)就是在这个谱域上做卷积——虽然现代 GCN 更多用空间域方法,但谱方法是理论基础。
