量化交易之数学与统计学基础2.2——线性代数与矩阵运算 | 特征值与特征向量
第二部分:线性代数与矩阵运算
第2节:特征值与特征向量:PCA 降维原理、因子分析中的应用
一、特征值与特征向量:矩阵变换的“核心密码”
在矩阵运算中,特征值(Eigenvalue)和特征向量(Eigenvector)具有极其重要的地位,它们描述了矩阵对向量的变换特性。
1. 数学定义
对于一个
n
×
n
n\times n
n×n 的方阵
A
\mathbf{A}
A,如果存在一个非零向量
v
\mathbf{v}
v 和一个标量
λ
\lambda
λ,使得:
A
v
=
λ
v
\mathbf{A}\mathbf{v}=\lambda\mathbf{v}
Av=λv
则称
λ
\lambda
λ 是矩阵
A
\mathbf{A}
A 的特征值,
v
\mathbf{v}
v 是对应于特征值
λ
\lambda
λ 的特征向量。
求解特征值和特征向量的过程,就是求解特征方程 det ( A − λ I ) = 0 \det(\mathbf{A}-\lambda\mathbf{I}) = 0 det(A−λI)=0 的根( λ \lambda λ),然后将每个特征值代入 ( A − λ I ) v = 0 (\mathbf{A}-\lambda\mathbf{I})\mathbf{v}=\mathbf{0} (A−λI)v=0 求解对应的特征向量 v \mathbf{v} v。
2. 几何意义
从几何角度看,特征向量的方向在矩阵变换下保持不变(可能会有长度的缩放),缩放比例就是对应的特征值。例如,在二维平面上,一个线性变换矩阵 A \mathbf{A} A 对某些向量的作用可能只是将其拉长或缩短,而不改变其方向,这些向量就是特征向量。
图 1:特征向量在矩阵变换下方向不变,仅长度按特征值缩放
二、主成分分析(PCA):数据降维的“魔法工具”
在量化交易中,我们常常面临高维数据(如包含大量因子的数据集),这不仅增加了计算复杂度,还可能导致过拟合问题。PCA 是一种常用的数据降维方法,其核心思想是通过线性变换将原始数据投影到一组新的正交坐标轴上,使得数据的方差最大化。
1. PCA 步骤
- 数据标准化:将原始数据的每个特征进行标准化处理,使其均值为 0,标准差为 1。这一步是为了消除不同特征尺度的影响。
- 计算协方差矩阵:对于标准化后的数据矩阵 X \mathbf{X} X,其协方差矩阵 C = 1 n − 1 X T X \mathbf{C}=\frac{1}{n - 1}\mathbf{X}^T\mathbf{X} C=n−11XTX。
- 特征值分解:对协方差矩阵 C \mathbf{C} C 进行特征值分解,得到特征值 λ 1 ≥ λ 2 ≥ ⋯ ≥ λ n \lambda_1\geq\lambda_2\geq\cdots\geq\lambda_n λ1≥λ2≥⋯≥λn 和对应的特征向量 v 1 , v 2 , ⋯ , v n \mathbf{v}_1,\mathbf{v}_2,\cdots,\mathbf{v}_n v1,v2,⋯,vn。
- 选择主成分:按照特征值的大小排序,选择前 k k k 个最大特征值对应的特征向量作为主成分,其中 k k k 是降维后的维度。
- 数据投影:将原始数据投影到选定的主成分上,得到降维后的数据。
2. 量化应用
- 因子筛选:在多因子模型中,通过 PCA 可以将大量的因子压缩为少数几个主成分,这些主成分代表了数据的主要信息,同时去除了因子之间的相关性。
- 风险模型:PCA 可以用于构建风险模型,将资产的风险暴露分解为几个主要的风险因子,从而简化风险评估和管理。
三、因子分析:挖掘数据背后的“潜在驱动因素”
因子分析(Factor Analysis)与 PCA 类似,但更侧重于挖掘数据背后的潜在因子结构。它假设观测变量是由少数几个不可观测的潜在因子和特定因子线性组合而成。
1. 因子分析模型
观测变量
x
=
(
x
1
,
x
2
,
⋯
,
x
p
)
T
\mathbf{x}=(x_1,x_2,\cdots,x_p)^T
x=(x1,x2,⋯,xp)T 可以表示为:
x
=
Λ
f
+
ϵ
\mathbf{x}=\mathbf{\Lambda}\mathbf{f}+\mathbf{\epsilon}
x=Λf+ϵ
其中,
Λ
\mathbf{\Lambda}
Λ 是因子载荷矩阵,
f
=
(
f
1
,
f
2
,
⋯
,
f
m
)
T
\mathbf{f}=(f_1,f_2,\cdots,f_m)^T
f=(f1,f2,⋯,fm)T 是潜在因子向量,
ϵ
=
(
ϵ
1
,
ϵ
2
,
⋯
,
ϵ
p
)
T
\mathbf{\epsilon}=(\epsilon_1,\epsilon_2,\cdots,\epsilon_p)^T
ϵ=(ϵ1,ϵ2,⋯,ϵp)T 是特定因子向量。
2. 与 PCA 的区别
- 目标不同:PCA 主要是为了数据降维,找到数据的最大方差方向;而因子分析更关注挖掘数据背后的潜在因子结构。
- 假设不同:PCA 没有对数据的生成机制做任何假设;而因子分析假设观测变量是由潜在因子和特定因子线性组合而成。
四、Python 实践:PCA 降维与因子分析
import numpy as np
from sklearn.decomposition import PCA, FactorAnalysis
import matplotlib.pyplot as plt
# 生成模拟数据(100 个样本,5 个特征)
np.random.seed(42)
X = np.random.randn(100, 5)
# 1. PCA 降维
pca = PCA(n_components=2) # 降维到 2 维
X_pca = pca.fit_transform(X)
# 2. 因子分析
fa = FactorAnalysis(n_components=2) # 提取 2 个潜在因子
X_fa = fa.fit_transform(X)
# 3. 可视化结果
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.scatter(X_pca[:, 0], X_pca[:, 1])
plt.title('PCA 降维结果')
plt.xlabel('主成分 1')
plt.ylabel('主成分 2')
plt.subplot(1, 2, 2)
plt.scatter(X_fa[:, 0], X_fa[:, 1])
plt.title('因子分析结果')
plt.xlabel('潜在因子 1')
plt.ylabel('潜在因子 2')
plt.tight_layout()
plt.show()
本节总结
- 特征值和特征向量是理解矩阵变换的关键,它们描述了矩阵对向量的作用方式。
- PCA 是一种有效的数据降维方法,通过特征值分解找到数据的主成分,减少数据维度,同时保留主要信息。
- 因子分析更侧重于挖掘数据背后的潜在因子结构,假设观测变量是由潜在因子和特定因子线性组合而成。