参数设置
重置
数据是通过固定种子的LCG随机数生成器和Box-Muller方法生成的。相同的参数会产生相同的点群。
散点图与主成分轴
灰色圆点=数据点/黑色×=均值/红色箭头=第1主轴(√λ₁倍)/蓝色箭头=第2主轴/绿色实线=1σ协方差椭圆
理论和主要公式
对于2维数据 X = {(x_i, y_i)},首先减去均值进行中心化,然后构造共分差矩阵。
2x2共分差矩阵。σ_xx、σ_yy是方差,σ_xy是共分差:
$$C = \begin{bmatrix} \sigma_{xx} & \sigma_{xy} \\ \sigma_{xy} & \sigma_{yy} \end{bmatrix}, \quad \sigma_{xy} = \frac{1}{n-1}\sum_i (x_i-\bar{x})(y_i-\bar{y})$$
2x2特征值的闭合形式解。T = 迹,D = 行列式:
$$\lambda_{1,2} = \frac{T \pm \sqrt{T^2 - 4D}}{2}, \quad T = \sigma_{xx}+\sigma_{yy}, \quad D = \sigma_{xx}\sigma_{yy} - \sigma_{xy}^2$$
第i主成分的贡献率(占全部方差的比例):
$$r_i = \frac{\lambda_i}{\lambda_1 + \lambda_2}$$
特征向量 $v_i$ 满足 $(C - \lambda_i I) v = 0$,表示数据的主要变动方向。第1主成分是方差最大的方向。
主成分分析模拟器是什么
🙋
经常听到PCA这个词,但最后是在做什么?散点图上只是有2条箭头而已…
🎓
简单地说,就是在寻找数据"最广泛延伸的方向"。在上面的模拟器中,试试把"相关系数 ρ"设为0.8。你会看到数据点形成一个向右上方倾斜的椭圆形——这个倾斜的方向就是红色箭头,也就是第1主成分。这是数据变化最大的轴。
🎓
与红色箭头垂直的方向,即第2主成分。对于2维数据,最多只能有2个主成分。看看贡献率卡片——当ρ=0.8、σ_x=2、σ_y=1时,仅第1主成分就能解释约94%的总方差。这就是"降维"的强大威力。即使是100维数据,通常也可以用前2-3个主成分解释80%以上的方差。
🙋
如果我把"相关系数"设为0,箭头会对齐到x轴和y轴,这是理所当然的吗?
🎓
完全正确。当ρ=0且σ_x ≠ σ_y时,共分差矩阵变成对角矩阵,所以特征向量就是标准坐标轴本身。第1主成分就是方差较大的那个轴——在σ_x=2、σ_y=1的情况下,就是x轴方向。反过来,如果σ_x=σ_y=1且ρ=0,矩阵就变成单位矩阵的标量倍数,主成分的方向就不确定了。这种情况称为"退化",本质上无法确定方向。
🎓
观察得很好。这就是采样噪声的影响。理论上,ρ=0.8、σ_x=2、σ_y=1应该给出λ₁=4.69、λ₂=0.31,但N很小时实测值会波动。在实际应用中,"多少个样本才能信任"是一个问题。一个经验法则是变量维数的10倍以上的样本量。反过来,如果把N增加到200,你会看到实测值非常接近理论值。
常见问题
PCA具体用在哪些领域?
图像识别(特征脸识别)、自然语言处理(潜在语义分析)、金融工程(股价数据主因子提取)、生物学(基因表达数据可视化)、质量管理(多变量控制图)、机器学习预处理(降维和去噪)等。只要数据是高维且变量间有相关性的领域,几乎都用得到。它有100多年的历史,是最基本、最广泛应用的多变量分析方法。
PCA和奇异值分解(SVD)有什么区别?
在数学上是等价的。将中心化后的数据矩阵X_c用SVD分解为X_c = U Σ V^T,V的列就是主成分(特征向量),Σ²/(n-1)的对角元素就是特征值。在实现上,不显式构造共分差矩阵而直接用SVD在数值上更稳定,特别是当变量数p远大于样本数n时。scikit-learn的PCA内部实际上也是用SVD。
白化(whitening)是什么?
将PCA得到的主成分坐标除以√λ_i,使所有主成分的方差都变为1。结果是数据变成无相关且方差为1的"白噪声"分布。用于独立成分分析(ICA)预处理、高斯过程预处理、深度学习输入正规化等。但对较小特征值做除法会导致数值不稳定,所以通常会丢弃低于阈值的主成分或加正则化项(ε-whitening)。
变量标度不同时怎么办?
应该在应用PCA前先标准化(将每个变量变换为均值0、方差1)。例如混合"身高(cm)"、"体重(kg)"和"年龄(岁)",身高的数值较大,第1主成分就会被身高主导。标准化后,所有变量对PCA的贡献权重相同。这叫"基于相关矩阵的PCA",与基于共分差矩阵的PCA区别对待。但如果只处理物理单位相同的变量,有时不需标准化。
实世界应用
图像识别(特征脸): 1990年代,Turk和Pentland提出的"特征脸(Eigenfaces)"是PCA最著名的应用。收集大量人脸图像,当作高维向量,对其应用PCA。高阶主成分代表"人脸主要变化模式"(亮度、发型、表情等)。人脸识别时,将认证对象的脸投影到主成分坐标中,用与已注册人脸的距离判定。虽然简单,但在深度学习前是标准方法。
基因表达数据可视化: 通过芯片或RNA-seq得到的数万维基因表达数据,用PCA处理后可在2-3维散点图上可视化样本(患者、组织、条件)。癌症分子分类、药物反应差异识别等标准工具。生物信息学论文中,PCA图通常是"第一张图"。
金融学的因子模型: 对股票收益率共分差矩阵进行PCA,第1主成分代表"市场整体动向",第2代表"行业相对动向",第3代表"规模效应"等。广泛用于投资组合优化和风险建模。
质量管理和异常检测: 对制造过程的多变量传感器数据应用PCA,只保留前几个主成分作为"正常状态"模型。新数据进来时,主成分空间内的距离(T²统计量)或遗弃主成分的投影量(Q统计量)过大就判为异常。在半导体制造和化工厂实际应用。
常见误解和注意事项
最常见的误解是认为"主成分一定有物理意义" 。主成分在数学上定义为"方差最大的方向",并不一定代表可解释的意义。有时候第1主成分可以解释为"总体满意度",第2为"价格vs质量权衡",但有时候完全无法解释。养成查看载荷(各原始变量的系数)的习惯,搞清楚线性组合的具体含义很重要。
其次常见的是用PCA处理非线性结构 的失败。PCA是线性方法,如果数据分布成曲线状(如瑞士卷)就无法捕捉结构。模拟器中把ρ接近0、σ_x≈σ_y设置,主成分方向就不确定了。对于圆环状或复杂聚类结构的数据,应考虑核PCA、t-SNE、UMAP或自编码器等非线性方法。"PCA降维后再机器学习"是很好的基线,但并不是万能的。
最后,不要低估"实测值与理论值的差异" 。这个模拟器中,N=40的有限样本计算出的特征值也会与理论值(λ₁=4.69、λ₂=0.31)偏差几个百分点。N=10会偏差更大。实际应用中,要判断"要保留多少主成分""观测到的贡献率是否统计显著",应该用自助法或交叉验证来评估特征值的置信区间。样本量少时,仅报告点估计是不够的,需要同时报告不确定性。
具体计算示例
制造现场加工精度数据分析中,设置ρ=0.75、σₓ=2.5μm、σᵧ=1.8μm、N=500时,共分差矩阵为{{6.25, 3.375}, {3.375, 3.24}}。特征值分解结果为λ₁≈8.12、λ₂≈1.37,第1主成分贡献率为(8.12÷9.49)≈85.6%。第1主轴倾斜角为θ≈38.7°,可以识别加工误差的主要因素方向。