4. 因子分析基础
在机器学习因子压缩与特征表示中,我们面对的高维数据往往存在大量冗余与噪声。主成分分析(PCA)、因子分析(FA)和独立成分分析(ICA)是三种最常用的线性降维与特征提取方法。它们都试图用少数潜在变量解释原始观测,但背后的假设、优化目标和适用场景差异显著。理解这些差异,是后续实战中选择正确工具的前提。
一、核心原理:三种方法在“找什么”
PCA 的目标是方差最大化。它寻找一组正交方向,使数据投影到这些方向后方差尽可能大。第一主成分方向是数据协方差矩阵最大特征值对应的特征向量,后续主成分依次正交且方差递减。PCA 不区分“信号”与“噪声”,只关心整体波动。
FA 假设观测数据由潜在公共因子和特殊噪声共同生成:X = ΛF + ε。其中 F 是低维公共因子,Λ 是因子载荷矩阵,ε 是各变量独有的误差项。FA 的目标是解释变量之间的协方差结构,而非总方差。它允许噪声项具有不同方差,因此更贴近“变量间相关性由少数潜在因子驱动”的假设。
ICA 追求统计独立性。它假设观测是若干独立非高斯源信号的线性混合,目标是恢复出相互独立的成分。ICA 不要求成分正交,也不按方差排序,而是通过最大化非高斯性(如负熵、峭度)来分离源信号。
二、方法流程与关键参数
三种方法在实操流程上有相似骨架,但关键步骤和参数不同。以下以 Python 生态为例说明。
from sklearn.decomposition import PCA, FactorAnalysis, FastICA
from sklearn.preprocessing import StandardScaler
X_scaled = StandardScaler().fit_transform(X)
# PCA:指定主成分数或方差解释率
pca = PCA(n_components=0.95, whiten=True)
X_pca = pca.fit_transform(X_scaled)
# FA:指定因子数,rotation 可选 varimax/promax
fa = FactorAnalysis(n_components=5, rotation='varimax', random_state=42)
X_fa = fa.fit_transform(X_scaled)
# ICA:指定成分数,algorithm 可选 parallel/deflation
ica = FastICA(n_components=5, algorithm='parallel', whiten='unit-variance', random_state=42)
X_ica = ica.fit_transform(X_scaled)
PCA 的核心参数是 n_components 与 whiten;FA 需要关注 rotation 以提升因子可解释性;ICA 则需注意 whiten 预处理和 algorithm 选择,且对随机种子敏感。
三、区别与适用场景对照
| 维度 | PCA | FA | ICA |
|---|---|---|---|
| 优化目标 | 方差最大化 | 协方差结构拟合 | 统计独立性最大化 |
| 成分关系 | 正交 | 可旋转、非唯一 | 非正交、独立 |
| 噪声假设 | 不显式建模 | 允许特殊噪声 | 假设无噪声或低噪声 |
| 排序依据 | 方差大小 | 因子解释力 | 非高斯性 |
| 典型场景 | 压缩、可视化、去冗余 | 潜变量建模、问卷分析 | 盲源分离、信号去噪 |
四、案例与误区复盘
案例:股票收益因子提取。若目标是降低组合维度并保留最大波动信息,PCA 是自然选择;若想识别“市场因子”“行业因子”等潜在驱动,FA 更合适,因为它的载荷矩阵可旋转出经济含义;若处理的是高频交易中的混合信号,且源信号近似独立,ICA 可能分离出更干净的微观结构成分。
常见误区一:把 PCA 当作因子分析。PCA 的成分是观测变量的线性组合,而 FA 的因子是潜在变量。PCA 不假设噪声结构,直接用于解释“为什么变量相关”时容易过度拟合。
常见误区二:ICA 前不做白化。ICA 通常需要先白化以去除二阶相关,否则独立成分的恢复会不稳定。但白化不等于 PCA 降维,二者目的不同。
常见误区三:忽略标准化。三种方法对量纲都敏感,未标准化时方差大的变量会主导结果。务必先做 StandardScaler 或等效处理。
选择建议:先问“我要保留方差,还是解释相关性,还是恢复独立源?”——保留方差选 PCA;解释相关性选 FA;恢复独立源选 ICA。若不确定,可从 PCA 开始做基线,再根据业务假设切换到 FA 或 ICA。