MCM520 ← 资料站首页 主成分回归 · 深度手册 打开交互阅读器 →

主成分回归 · 深度手册

分类:经典模型 | 难度:★★☆ 进阶 | 编号:pca_reg

一、这是什么(一句话用途)

多重共线性下的回归(高相关自变量)

二、核心思想

当多个自变量高度相关(多重共线性)时,普通最小二乘回归的系数估计方差会爆炸、符号都可能反常。主成分回归(PCR)先对这些自变量做 PCA,提取少数几个互不相关的主成分,再用主成分作为新的自变量做回归——相当于"先降维去冗余,再回归"。它用一点点偏差换来了系数稳定性的大幅提升,是处理高相关预测变量的标准套路,代价是回归系数不再直接对应原变量(需反变换解释)。

三、数学原理与推导

标准化自变量矩阵 XX(n×pn\times p)。PCA 得前 kk 个主成分得分矩阵 Z=XQkZ=X Q_k(QkQ_k 为前 kk 特征向量,k<pk<p)。在 ZZ 上做 OLS:

β^z=(ZTZ)−1ZTy \hat{\beta}_z=(Z^T Z)^{-1}Z^T y

因主成分正交,ZTZZ^T Z 近似对角,系数稳定。还原到原变量系数:由于 Z=XQkZ=XQ_k,有

y^=Zβ^z=XQkβ^z=Xβ^X \hat{y}=Z\hat{\beta}_z=X Q_k\hat{\beta}_z=X\hat{\beta}_X

故原变量系数 β^X=Qkβ^z\hat{\beta}_X=Q_k\hat{\beta}_z。由于丢弃了 p−kp-k 个小方差主成分(对应噪声方向),PCR 是有偏但方差更小的估计,常优于普通回归的均方误差。主成分个数 kk 由累计贡献率或交叉验证定。

四、建模 / 求解步骤

  1. 标准化
  2. PCA 取前 k 主成分
  3. 以主成分为自变量回归
  4. 系数反变换回原变量

五、关键公式速查

用前 k 主成分 Z 建 y=Zβ,β 反推原 X 系数

六、典型示例

经济指标高度相关时比普通回归稳。

完整算例(数字演示,照着算一遍)

场景:先用 PCA 把 8 个共线指标压成 3 主成分(累计 0.9),再做线性回归 y~PC1..PC3。

结果:R²=0.82,且消除了多重共线性(VIF<2)。

结论:PCR 兼顾降维与可解释,系数稳定。

七、Python 实现示例

import os, numpy as np
import pandas as pd
HERE = os.path.dirname(os.path.abspath(__file__))
df = pd.read_csv(os.path.join(HERE,"..","datasets","pca_reg.csv"))
y = df["y"].to_numpy(dtype=float)
X = df[["x1","x2","x3"]].to_numpy(dtype=float)
Xs=(X-X.mean(0))/X.std(0)
Cov=np.cov(Xs.T); lam,vec=np.linalg.eigh(Cov)
order=np.argsort(lam)[::-1]; vec=vec[:,order]
Z=Xs@vec[:,:2]
Zb=np.hstack([np.ones((len(Z),1)),Z])
beta=np.linalg.lstsq(Zb,y,rcond=None)[0]
print("主成分回归系数:", np.round(beta,3))
print("R^2=%.3f"%(1-((y-Zb@beta)**2).sum()/((y-y.mean())**2).sum()))

配套文件:py_pca_reg.py(需 numpy / pandas;与下方数据集配套练习)

八、MATLAB 实现示例

%% 主成分回归示例(MATLAB/Octave)
df = readtable('..\datasets\pca_reg.csv');
y=table2array(df(:,1)); X=table2array(df(:,2:4));
Xs=(X-mean(X,1))./std(X,1); [vec,lam]=eig(cov(Xs')); lam=diag(lam);
[~,o]=sort(lam,'descend'); Z=Xs*vec(:,o(1:2));
Zb=[ones(height(Z),1),Z]; beta=Zb\y;
R2=1-sum((y-Zb*beta).^2)/sum((y-mean(y)).^2);
disp(beta); fprintf('R2=%.3f\n',R2);

配套文件:m_pca_reg.m(基础 MATLAB / Octave 即可运行)

九、练手数据集(可下载)

目标 y 与 3 个高度相关自变量(x1,x2,x3)的 30 组样本。用于主成分回归降维去共线性。

  • 字段:y, x1, x2, x3
  • 行数:30 行
  • 下载:pca_reg.csv

十、常见误区与避坑清单

  • 仍要标准化
  • 主成分个数凭累计贡献率
  • 解释性弱于原变量

十一、结果怎么解读

看主成分含义再解释回归。

十二、常与谁搭配

基础见 pca_eval。

十三、论文写作技巧(怎么把它写进论文)

把 主成分回归 写进论文,核心不是堆公式,而是讲清「为什么用它、结果怎么呈现、如何对比」三件事。

1. 动机怎么写(为什么用它而不是别的)

这类是数学建模的「经典武器」。写作时先建实际问题的数学抽象(状态、转移、随机性),再引入 主成分回归 作为求解 / 仿真工具,强调它比纯解析更贴近现实不确定性。

2. 结果怎么写(图表与指标)

结果可用仿真曲线、状态转移图、收敛 / 稳定分布图呈现;蒙特卡洛给直方图与置信区间,马尔可夫给转移矩阵与稳态分布。

3. 可直接套用的写作话术

  • 中文模板:针对<问题>,本文采用 主成分回归 进行多重共线性下的回归(高相关自变量)。该方法能够自动刻画<优势>,在处理<场景>时相较<对比方法>更具<特点>。
  • 英文模板:To address , we adopt 主成分回归 to 多重共线性下的回归(高相关自变量). Benefiting from its ability to , it outperforms on .

4. 同类易踩的写作坑

说明随机种子的可复现性;区分「均值结果」与「单次实现」,论文应报统计平均而非偶发轨迹。

5. 典型论文段落范例(可直接参考 / 改写)

下面是一段可直接套用的论文表述,已按本算法定制,填空处(…)替换成你的真实数值即可。

为刻画异质网络上的传染病扩散,本文采用 主成分回归 进行 10,000 次蒙特卡洛仿真,估计基本再生数 R0 的 95% 置信区间为 [2.1, 2.6],较确定性 ODE 更接近真实不确定性。

To capture epidemic spread over heterogeneous networks, we use 主成分回归 with 10,000 Monte-Carlo runs, estimating the 95% CI of R0 as [2.1, 2.6], which is closer to the true uncertainty than a deterministic ODE.

十四、相关手册(延伸阅读)

十五、本手册导航


本手册由「算法深度手册生成器」自动产出,配套提供 Python / MATLAB 双版本示例与可下载练手数据集。