从一个问题开始
当一个矩阵对平面进行线性变换时,大多数向量的方向都会被甩开(既旋转又拉伸)。但在某些特定方向上,向量只发生缩放而完全不改变方向。这些特殊的轴线是什么?
初学者直觉:不旋转的“定海神针” (Direction Locking)
想象一小块被扭曲拉伸的橡胶膜:
- 大部分点的位置被旋转并拉远。
- 但存在极少数特殊的轴线,轴上的向量经过变换后方向完全锁死不动,只沿着原本的直线被拉长、缩短或翻转。
- 特征向量 v:就是这条“方向不发生旋转”的定海神针。
- 特征值 λ:就是在该轴线上的拉伸倍数(λ>1 放大,λ=0.5 缩小一半,λ=−1 反向翻转)。
点击放大查看图:特征向量变换后方向不变仅拉伸几何示意图
1. 特征值与特征向量的定义
对于 n×n 方阵 A,若存在非零向量 v 和标量 λ,满足:
Av=λv⟺(A−λI)v=0
则称 λ 为 A 的特征值,v 为对应的特征向量。
求特征值的特征方程为:
det(A−λI)=0
手算例子:求解 2x2 矩阵的特征值与特征向量
给定 A=[4213]:
- 求解特征方程:
det[4−λ213−λ]=(4−λ)(3−λ)−2=λ2−7λ+10=0
解得 λ1=5,λ2=2。
2. 代入 λ1=5 求解特征向量 (A−5I)v=0:
[−121−2][v1v2]=0⟹−v1+v2=0⟹v(1)=[11]
2. 矩阵对角化与谱定理
2.1 矩阵对角化
若 n×n 矩阵 A 有 n 个线性无关的特征向量 v1,…,vn,令 P=[v1,…,vn],D=diag(λ1,…,λn),则有:
AP=PD⟹A=PDP−1
对角化的极度威力在于计算矩阵的高次幂:Ak=PDkP−1。
2.2 实对称矩阵谱定理
在机器学习中,遇到的绝大多数矩阵(如协方差矩阵 XTX、Hessian 矩阵)都是实对称矩阵(A=AT)。
实对称矩阵具备极佳的性质:
- 所有特征值均为实数。
- 不同特征值对应的特征向量相互正交。
- 必定可以进行正交对角化:A=QΛQT,其中 Q 为标准正交矩阵(QTQ=I)。
Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.
3. 正定矩阵与协方差矩阵
3.1 二次型与正定矩阵
对于对称矩阵 A,其**二次型(Quadratic Form)**定义为 f(x)=xTAx。
- 正定矩阵(Positive Definite, A≻0):对任意非零向量 x,均有 xTAx>0。其所有特征值 λi>0。
- 二次型 xTAx=1 的等高线是一个封闭的椭圆/椭球。
3.2 数据的协方差矩阵
对于零均值数据集 X∈Rm×n(m 个样本,n 个特征),协方差矩阵定义为:
Σ=m1XTX
Σ 是半正定的实对称矩阵。其最大特征值对应的特征向量指向数据方差最大的方向(主方向)。
4. 手算演练
手算练习:求解 2x2 矩阵的特征值与特征向量全过程
给定对称矩阵 A=[3113]:
- 第一步:建立特征方程 det(A−λI)=0:
A−λI=[3−λ113−λ]
det(A−λI)=(3−λ)(3−λ)−(1×1)=λ2−6λ+9−1=λ2−6λ+8=0
- 第二步:因式分解求根:
(λ−4)(λ−2)=0⟹λ1=4,λ2=2
得出两个特征值分别为 4 和 2。
- 第三步:求解 λ1=4 对应的特征向量 v(1):
(A−4I)v=0⟹[3−4113−4][v1v2]=[−111−1][v1v2]=[00]
展开为方程:−v1+v2=0⟹v1=v2。
取基向量并单位化:v(1)=[2121]。
- 第四步:求解 λ2=2 对应的特征向量 v(2):
(A−2I)v=0⟹[1111][v1v2]=[00]⟹v1+v2=0⟹v1=−v2
取基向量并单位化:v(2)=[21−21]。
- 验证正交性与对角化:
(v(1))Tv(2)=(21×21)+(21×−21)=21−21=0(完全正交!)
5. 动手实战:验证特征方程与协方差矩阵主方向
下面的代码展示如何使用 NumPy 计算特征值、验证 Av=λv,并计算数据的协方差矩阵及其主要方差方向:
import numpy as np
# 1. 验证 A v = lambda v
A = np.array([[4.0, 1.0],
[2.0, 3.0]])
eigenvalues, eigenvectors = np.linalg.eig(A)
print("特征值 lambda:", eigenvalues)
print("特征向量矩阵 V:\n", eigenvectors)
# 取第一个特征值和特征向量
lam0 = eigenvalues[0]
v0 = eigenvectors[:, 0]
# 验证 Av 与 lambda v 的误差
left = A @ v0
right = lam0 * v0
print("Av0 与 lambda0 * v0 的极小残差:", np.max(np.abs(left - right)))
# 2. 计算二维数据点云的协方差矩阵与主方向
np.random.seed(42)
# 生成沿 y = 2x 方向倾斜的数据集
X_raw = np.random.randn(200, 2) @ np.array([[2.0, 1.0], [0.5, 1.5]])
X_centered = X_raw - np.mean(X_raw, axis=0) # 中心化
# 求解协方差矩阵 Sigma = (1/m) Xᵀ X
cov_matrix = (X_centered.T @ X_centered) / len(X_centered)
evals, evecs = np.linalg.eigh(cov_matrix) # 对称矩阵用 eigh
# 按特征值从大到小排序
idx = np.argsort(evals)[::-1]
evals = evals[idx]
evecs = evecs[:, idx]
print("\n协方差矩阵:\n", np.round(cov_matrix, 4))
print("主方向特征值(方差):", np.round(evals, 4))
print("主成分第一方向向量:", np.round(evecs[:, 0], 4))
5. 常见错误与避坑指南
|
np.linalg.eig 返回复数 | 矩阵是否不对称 | 一般非对称矩阵特征值可能是复数;对称矩阵请使用 np.linalg.eigh |
| 特征向量列顺序错乱 | 特征值是否排序 | np.linalg.eig 不会自动按从大到小排序,需用 np.argsort 手动排序 |
xᵀ A x < 0 无法开方 | 矩阵是否正定 | 在计算 Hessian 或协方差时,必须确保矩阵所有特征值大于 0 |
检查清单 (Checklist)
自测题
- 设 A=[3005],求 A 的特征值和特征向量。
- 解释:为什么实对称矩阵 A=AT 的不同特征值对应的特征向量必定相互正交?
- 如果一个矩阵 A 存在特征值 λ=0,这说明该矩阵的行列式 det(A) 与可逆性如何?
- 【代码阅读题】在求解实对称矩阵(如协方差矩阵)时,为什么推荐使用
np.linalg.eigh 而不是 np.linalg.eig?
点击查看参考答案
- 特征值为 λ1=3,λ2=5;对应的特征向量分别为 e1=[1,0]T,e2=[0,1]T。
- 设 Av1=λ1v1,Av2=λ2v2。则 λ1(v1Tv2)=(Av1)Tv2=v1TATv2=v1T(Av2)=λ2(v1Tv2)。由于 λ1=λ2,必有 v1Tv2=0,即正交。
- 行列式 det(A)=∏λi=0。说明矩阵秩亏损、奇异且不可逆。
np.linalg.eigh 专门针对实对称/复自共轭矩阵优化,保证返回的特征值均为纯实数、特征向量完全正交,且数值计算比通用 eig 更高效准确。
下一步
进入最后一个专项 ,学习任意矩阵的奇异值分解、低秩近似与 PCA 降维在机器学习中的防数据泄露工程规范。
参考资料
- :第 4 章 矩阵分解与特征值。
- :特征值与特征向量的几何直觉。