特征值与特征向量
矩阵的特征向量是矩阵变换时方向不变的向量——只是缩放。特征值告诉你缩放了多少。它们是 PCA、因子模型和马尔可夫链的基础。
什么是特征向量
当矩阵 乘以向量 时,它会变换该向量——旋转、拉伸或压缩。特征向量是一种特殊向量,它在变换中不会被旋转。它只会缩放。
其中 是特征向量, 是特征值——特征向量被拉伸或压缩的因子。如果 ,特征向量的长度翻倍。如果 ,它翻转方向且长度减半。
“eigen” 一词来自德语,意思是”自己的”或”特有的”。特征向量是矩阵的”固有”方向,是矩阵固有的,而非任意的。
求特征值
方程 可以改写为:
对于非零 要满足此条件,矩阵 必须是奇异的——它的行列式必须为零。这给出了特征方程:
解这个方程得到特征值。然后将每个特征值代回以找到其对应的特征向量。
对于 矩阵,特征方程是二次的,你可以手解。对于更大的矩阵,数值软件是必不可少的。
特征分解
一旦你有了 矩阵 的所有 个特征值和特征向量,你可以写成:
其中 是其列为特征向量的矩阵, 是对角线上为特征值的对角矩阵:
这就是 的特征分解。
对于对称矩阵——协方差矩阵总是对称的——特征向量相互正交,这意味着 。这大大简化了分解:
特征值的性质
几个关系将特征值与矩阵的其他性质联系起来:
迹(对角线元素之和)等于特征值之和:
行列式等于特征值的乘积:
对称矩阵总是有实特征值。 复数特征值需要振荡行为——旋转向量而非仅仅缩放。协方差矩阵按定义是对称的,从不旋转向量。它的特征值始终是实数。
正定矩阵的所有特征值都大于零。协方差矩阵是半正定的(所有特征值 ),如果没有任何资产是其他资产的完美线性组合,则是正定的。
用 Python 计算
import numpy as np
Sigma = np.array([[1.0, 0.5, 0.3],
[0.5, 1.0, 0.4],
[0.3, 0.4, 1.0]])
# 对于对称矩阵,使用 eigh(数值更稳定)
eigenvalues, eigenvectors = np.linalg.eigh(Sigma)
# 特征值按升序排列
print("特征值:", eigenvalues)
print("特征向量(列):\n", eigenvectors)
# 验证:A @ v = lambda * v
for i in range(3):
lam = eigenvalues[i]
v = eigenvectors[:, i]
lhs = Sigma @ v
rhs = lam * v
print(f"特征值 {i}: {np.allclose(lhs, rhs)}")
提示词
用 numpy.linalg.eigh 算 3×3 对称矩阵的特征值和特征向量,用 np.allclose 验证 A@v = λv。
对于非对称矩阵,使用 np.linalg.eig 而不是 np.linalg.eigh。非对称版本可能返回复数特征值,你需要以不同方式处理。
应用:PCA 和方差分解
在关于主成分分析(PCA)的文章中,你将看到特征值被立即投入使用。给定资产收益率的协方差矩阵,特征值告诉你每个主成分捕获了多少总方差。
因为协方差矩阵是对称半正定的:
- 每个特征值
- 所有特征值之和等于总方差( 的迹)
- 分数 是第 个成分解释的总方差比例
在实践中,一个 500 资产协方差矩阵可能 95% 的方差集中在前 20 个特征值中。其余 480 个特征值接近于零——这是不有意义描述投资组合如何运动的噪声。这就是 PCA 实现降维的方式。
import numpy as np
# 模拟的 5 资产协方差矩阵
Sigma = np.array([[1.00, 0.80, 0.40, 0.20, 0.10],
[0.80, 1.00, 0.50, 0.30, 0.15],
[0.40, 0.50, 1.00, 0.60, 0.25],
[0.20, 0.30, 0.60, 1.00, 0.70],
[0.10, 0.15, 0.25, 0.70, 1.00]])
eigenvalues, _ = np.linalg.eigh(Sigma)
# 降序排列(eigh 返回升序)
eigenvalues = eigenvalues[::-1]
# 每个成分的方差解释量
total_var = eigenvalues.sum()
var_explained = eigenvalues / total_var
cum_var = np.cumsum(var_explained)
print("成分 | 特征值 | 方差 % | 累积 %")
for i in range(5):
print(f" PC{i+1} | {eigenvalues[i]:.4f} | {var_explained[i]*100:5.1f} | {cum_var[i]*100:5.1f}")
提示词
用 numpy.linalg.eigh 算 5×5 协方差矩阵的特征值,按降序排列,算每个主成分的方差解释比例和累积方差,打印成表格。
参考文献
Strang, Introduction to Linear Algebra, 5th edition, Wellesley-Cambridge Press, Chapter 6. ISBN: 978-0980232776.
Lax, Linear Algebra and Its Applications, 2nd edition, Wiley, Chapter 7. ISBN: 978-0471751564.