查看全集:💎Quantopia量化分析56讲
主成分分析(PCA)是一种降维技术,通过线性变换将高维数据投影到低维空间,同时保留最大方差。想象你要给朋友描述一张复杂图片,你会先抓住主要特征(形状、颜色分布),PCA就是帮我们找出这些"主要特征"的数学工具。
小知识:特征值大小反映主成分的重要性,越大说明该方向方差越大
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')
# 计算协方差矩阵
C = np.cov(X)
# 特征分解
eigenvalues, eigenvectors = np.linalg.eigh(C)
# 按特征值降序排列
idx = eigenvalues.argsort()[::-1]
eigenvalues = eigenvalues[idx]
eigenvectors = eigenvectors[:, idx]
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值对应的方差保留比例
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()
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%方差
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')
将主成分作为新特征输入到机器学习模型,可有效降低维度灾难风险
对比分析:尝试对有/无标准化的数据分别进行PCA,观察特征值分布差异
使用yfinance获取中国A股10只股票数据:
# 练习参考答案框架
symbols_cn = ['600519.SS', '000001.SZ', ...] # 填入实际股票代码
data_cn = yf.download(symbols_cn, ...)
# 自行补充完整分析代码
通过本教程,您应该能够掌握PCA的核心思想,并在实际数据分析中灵活应用。当处理高维数据时,记得将PCA作为您的"数据望远镜",帮助您洞察复杂数据背后的主要结构!