跳到主内容
研究主线资产定价与组合构建 · 第30–36讲7/7模块导览 →
讲义

第36讲:主成分分析 (Principal Component Analysis)

从协方差特征分解解释 PCA,演示图像压缩与股票风险降维,并讨论标准化、解释方差和成分含义。

完成状态保存在当前浏览器,可随时取消。

一、PCA基础概念#

1.1 什么是PCA?#

主成分分析(PCA)是一种降维技术,通过线性变换将高维数据投影到低维空间,同时保留最大方差。想象你要给朋友描述一张复杂图片,你会先抓住主要特征(形状、颜色分布),PCA就是帮我们找出这些"主要特征"的数学工具。

1.2 关键数学公式#

  • 协方差矩阵:对于中心化后的数据矩阵X,协方差矩阵C=(1/(n1))XXTC = (1/(n-1)) X X^T

  • 特征分解C=PΛPTC = P Λ P^T,其中Λ为特征值对角矩阵,P为特征向量矩阵

  • 主成分:第k个主成分 Vk=PkTXV_k = P_k^T XPkP_k为第k个特征向量)

小知识:特征值大小反映主成分的重要性,越大说明该方向方差越大

二、图像处理实例#

2.1 生成测试图像#

code
import numpy as np
import matplotlib.pyplot as plt

def generate_test_image(m, n):
    X = np.zeros((m, n))
    # 添加几何图形(代码与原文相同)
    return X

X = generate_test_image(200, 200)
plt.imshow(X, cmap='gray')

2.2 执行PCA#

code
# 计算协方差矩阵
C = np.cov(X)
# 特征分解
eigenvalues, eigenvectors = np.linalg.eigh(C)
# 按特征值降序排列
idx = eigenvalues.argsort()[::-1]
eigenvalues = eigenvalues[idx]
eigenvectors = eigenvectors[:, idx]

2.3 图像重构对比#

code
def reconstruct_image(k, eigenvectors, X):
    components = eigenvectors[:, :k]
    return components @ (components.T @ X)

fig, axs = plt.subplots(2, 2, figsize=(10,10))
for i, k in enumerate([10, 20, 30, 60]):
    ax = axs[i//2, i%2]
    ax.imshow(reconstruct_image(k, eigenvectors, X), cmap='gray')
    ax.set_title(f'k={k}')

练习:尝试不同k值观察图像质量变化,记录各k值对应的方差保留比例

三、金融投资组合分析#

3.1 数据获取与预处理#

code
import yfinance as yf

symbols = ['IBM', 'MSFT', 'FB', 'T', 'INTC', 'ABX', 'NEM', 'AU', 'AEM', 'GFI']
data = yf.download(symbols, start='2015-09-01', end='2016-11-01')['Adj Close']
returns = data.pct_change().dropna()

3.2 主成分分析#

code
from sklearn.decomposition import PCA

pca = PCA(n_components=2)
factors = pca.fit_transform(returns)

print(f"解释方差比例: {pca.explained_variance_ratio_}")
# 典型输出: [0.65, 0.15] 表示前两个主成分解释80%方差

3.3 结果可视化#

code
plt.figure(figsize=(10,6))
plt.scatter(factors[:,0], factors[:,1], c=returns.index.dayofweek)
plt.xlabel('Factor 1')
plt.ylabel('Factor 2')
plt.colorbar(label='Day of Week')

四、进阶应用#

4.1 特征工程应用#

将主成分作为新特征输入到机器学习模型,可有效降低维度灾难风险

4.2 注意事项#

  • 数据标准化:不同量纲特征需先标准化(z-score)

  • 过拟合风险:主成分过多可能导致模型过拟合

  • 解释性:主成分的物理意义需要结合业务理解

对比分析:尝试对有/无标准化的数据分别进行PCA,观察特征值分布差异

五、总结与练习#

5.1 关键点总结#

  1. PCA通过线性变换寻找最大方差方向

  2. 主成分个数选择取决于累计方差贡献率

  3. 在金融中可用于风险因子提取和降维

5.2 综合练习#

使用yfinance获取中国A股10只股票数据:

  1. 计算日收益率并进行PCA

  2. 绘制前两个主成分的散点图

  3. 比较不同行业股票在主成分空间中的分布

code
# 练习参考答案框架
symbols_cn = ['600519.SS', '000001.SZ', ...] # 填入实际股票代码
data_cn = yf.download(symbols_cn, ...)
# 自行补充完整分析代码

通过本教程,您应该能够掌握PCA的核心思想,并在实际数据分析中灵活应用。当处理高维数据时,记得将PCA作为您的"数据望远镜",帮助您洞察复杂数据背后的主要结构!