正在加载中...

展开本页目录
算法教程PLSRegression-偏最小二乘(PLS)

PLSRegression-偏最小二乘(PLS)

No.051 · 在线教程

偏最小二乘回归(Partial Least Squares Regression, PLS)是一种同时处理多重共线性与高维特征问题的监督学习方法。其核心思想是在自变量矩阵 X 与因变量矩阵 Y 之间提取一组潜变量(成分),使这些潜变量既能充分解释 X 方差,又与 Y 具有较强相…

PLSRegression-偏最小二乘(PLS)

1. 方法概述

偏最小二乘回归(Partial Least Squares Regression, PLS)是一种同时处理多重共线性高维特征问题的监督学习方法。
其核心思想是在自变量矩阵 \(X\) 与因变量矩阵 \(Y\) 之间提取一组潜变量(成分),使这些潜变量既能充分解释 \(X\) 方差,又与 \(Y\) 具有较强相关性。

设样本数为 \(n\),自变量维度为 \(p\),因变量维度为 \(q\),则 $$ X\in\mathbb{R}^{n\times p},\quad Y\in\mathbb{R}^{n\times q} \tag{1} $$

标准 PLS 分解写作 $$ X=TP^\top+E,\qquad Y=UQ^\top+F \tag{2} $$ 其中:

  • \(T\in\mathbb{R}^{n\times a}\):\(X\) 得分矩阵(scores)
  • \(U\in\mathbb{R}^{n\times a}\):\(Y\) 得分矩阵
  • \(P\in\mathbb{R}^{p\times a}\):\(X\) 载荷矩阵(loadings)
  • \(Q\in\mathbb{R}^{q\times a}\):\(Y\) 载荷矩阵
  • \(E,F\):残差矩阵
  • \(a\):提取成分数(\(a\le\min(p,n-1)\))

2. 数据预处理

在 PLS 建模前,通常对 \(X,Y\) 做中心化与标准化。若采用 Z-score 标准化: $$ \tilde x_{ij}=\frac{x_{ij}-\mu_{x_j}}{\sigma_{x_j}},\qquad \tilde y_{ik}=\frac{y_{ik}-\mu_{y_k}}{\sigma_{y_k}} \tag{3} $$

若存在缺失值,应先做删行或插补,确保参与建模的 \(X,Y\) 为完整矩阵。

3. NIPALS 成分提取

PLS 常用 NIPALS 迭代提取每个成分。对第 \(h\) 个成分(\(h=1,\dots,a\)):

3.1 权重与得分更新

$$ w_h=\frac{X_h^\top u_h}{u_h^\top u_h},\qquad w_h\leftarrow\frac{w_h}{\|w_h\|_2} \tag{4} $$ $$ t_h=X_h w_h \tag{5} $$ $$ c_h=\frac{Y_h^\top t_h}{t_h^\top t_h},\qquad c_h\leftarrow\frac{c_h}{\|c_h\|_2} \tag{6} $$ $$ u_h=\frac{Y_h c_h}{c_h^\top c_h} \tag{7} $$

3.2 收敛判据

$$ \|u_h^{(k)}-u_h^{(k-1)}\|_2<\varepsilon \tag{8} $$ 其中 \(k\) 为迭代轮次,\(\varepsilon\) 为容差。

3.3 载荷与去残差(deflation)

$$ p_h=\frac{X_h^\top t_h}{t_h^\top t_h},\qquad q_h=\frac{Y_h^\top t_h}{t_h^\top t_h} \tag{9} $$ $$ X_{h+1}=X_h-t_h p_h^\top,\qquad Y_{h+1}=Y_h-t_h q_h^\top \tag{10} $$

4. 回归系数与预测

令 $$ W=[w_1,\dots,w_a],\quad P=[p_1,\dots,p_a],\quad Q=[q_1,\dots,q_a] \tag{11} $$

PLS 旋转矩阵可写为 $$ R=W(P^\top W)^{-1} \tag{12} $$

回归系数矩阵 $$ B=RQ^\top \tag{13} $$

若已做标准化,则原尺度下预测为 $$ \hat Y=XB+b \tag{14} $$ 其中 \(b\) 为截距向量。

5. 变量重要性(VIP)

VIP 用于衡量各自变量对模型解释 \(Y\) 的贡献。设第 \(h\) 个成分对 \(Y\) 的贡献为 \(SSY_h\),则第 \(j\) 个变量的 VIP 为 $$ \mathrm{VIP}_j=\sqrt{ \frac{p\sum_{h=1}^{a}SSY_h\,w_{jh}^2} {\sum_{h=1}^{a}SSY_h} } \tag{15} $$ 通常认为 \(\mathrm{VIP}_j>1\) 的变量较重要。

6. 解释方差与累计解释率

对第 \(h\) 个成分,基于 deflation 前后平方和下降比例计算解释方差更稳健: $$ \mathrm{VarX}_h=\frac{\|X_h\|_F^2-\|X_{h+1}\|_F^2}{\|X_1\|_F^2} \tag{16} $$ $$ \mathrm{VarY}_h=\frac{\|Y_h\|_F^2-\|Y_{h+1}\|_F^2}{\|Y_1\|_F^2} \tag{17} $$

累计解释率: $$ \mathrm{CumVarX}_k=\sum_{h=1}^{k}\mathrm{VarX}_h,\qquad \mathrm{CumVarY}_k=\sum_{h=1}^{k}\mathrm{VarY}_h \tag{18} $$ 理论上 \(\mathrm{CumVarX}_k,\mathrm{CumVarY}_k\in[0,1]\)。

7. 模型评价指标

设真实值为 \(y_i\),预测值为 \(\hat y_i\)(单目标情形):

$$ R^2=1-\frac{\sum_{i=1}^{n}(y_i-\hat y_i)^2}{\sum_{i=1}^{n}(y_i-\bar y)^2} \tag{19} $$ $$ \mathrm{RMSE}=\sqrt{\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat y_i)^2} \tag{20} $$ $$ \mathrm{MAE}=\frac{1}{n}\sum_{i=1}^{n}|y_i-\hat y_i| \tag{21} $$ $$ R^2_{\mathrm{adj}}=1-(1-R^2)\frac{n-1}{n-a-1} \tag{22} $$

其中 \(a\) 为成分数。

8. 符号说明表

符号 含义
\(n\) 样本数
\(p\) 自变量个数
\(q\) 因变量个数
\(a\) PLS 成分数
\(X,Y\) 自变量矩阵、因变量矩阵
\(T,U\) \(X\) 得分、\(Y\) 得分
\(P,Q\) \(X\) 载荷、\(Y\) 载荷
\(W\) \(X\) 权重矩阵
\(B\) 回归系数矩阵
\(\hat Y\) 预测值矩阵
\(\mathrm{VIP}_j\) 第 \(j\) 个变量的 VIP 值

9. 论文写作模板

9.1 方法描述模板

“本文采用偏最小二乘回归(PLS)建立自变量与因变量之间的映射关系。首先对样本进行预处理与标准化(式(3)),随后基于 NIPALS 算法迭代提取潜变量(式(4)–式(10)),并由旋转矩阵与载荷矩阵构建回归系数(式(12)–式(14))。模型性能采用 \(R^2\)、调整 \(R^2\)、RMSE 与 MAE 评价(式(19)–式(22)),并结合 VIP 指标识别关键解释变量(式(15))。”

9.2 结果解释模板

结果部分可写为:结果显示,模型在测试集上 \(R^2=\cdots\)、RMSE=\(\cdots\)、MAE=\(\cdots\)。前 \(a\) 个成分对 \(Y\) 的累计解释率为 \(\mathrm{CumVarY}_a=\cdots\)(式(18))。VIP 排名前列变量为 \(\cdots\),说明其对响应变量变化具有主要贡献。

9.3 图表说明模板

  • 图 1:PLS score plot(样本在潜变量空间的投影)
  • 图 2:PLS loading plot(变量在潜变量空间的载荷)
  • 图 3:预测值与真实值对比图
  • 图 4:残差诊断图(残差分布、残差-拟合、Q-Q)
  • 表 1:模型参数与评价指标
  • 表 2:解释方差与累计解释率
  • 表 3:VIP 与回归系数排序

10. 使用与报告注意事项

  1. 成分数不宜过大,建议结合交叉验证与累计解释率共同确定。
  2. 报告解释方差时应明确采用的定义(本实现采用 deflation 平方和比例,累计值在 \([0,1]\))。
  3. VIP 与回归系数需结合业务含义解释,避免仅依据阈值机械筛选。
  4. 论文中建议正文放核心公式与主结果表,详细中间矩阵可附录展示。

11. 与代码实现的对应关系

本算法在程序中由 具体的算法2/PLSRegression-偏最小二乘(PLS)/core/calculator.py 实现,并配套绘图模块输出得分图、载荷图、预测图和残差诊断图。程序产物已经天然适合论文按“建模设定—成分解释—变量重要性—预测表现”展开。

11.1 程序实际导出的工作表

  • Parameters:模型参数与成分数;
  • Raw_Preview:原始数据预览;
  • Processed_Preview:预处理后数据预览;
  • Preprocess_Info:样本清洗与特征处理信息;
  • X_Scores:样本在潜变量空间的得分;
  • X_Loadings:变量在潜变量空间的载荷;
  • Coefficients:回归系数;
  • VIP:变量重要性排序;
  • Evaluation:\(R^2\)、调整 \(R^2\)、RMSE、MAE 等指标;
  • Explained_Variance:解释方差与累计解释率;
  • Predictions:真实值、预测值、残差;
  • Charts_Index:图表索引。

11.2 程序实现中值得写入论文的点

  • PLS 的得分、载荷、VIP 和预测结果都已单独落表,无需论文阶段再手工拆分;
  • 若是多目标回归,Coefficients 会按目标维度展开;
  • Charts_Index 对应图通常覆盖 score/loadings、预测对比、残差诊断,适合主文和附录分层使用;
  • Preprocess_Info 建议直接作为方法部分的数据处理依据。

12. 导出 Sheet 与公式一一对应(可直接写入论文)

下表对应程序导出的 Excel 工作表(PLS分析结果_*.xlsx),可直接用于“表-公式-解释”联动写作。

Sheet 名称 对应公式 论文中可写内容
Parameters 式(1)、式(3) 样本规模、变量集合、成分数、是否标准化等建模设定。
Raw_Preview 式(1) 原始样本的观测结构与变量定义。
Processed_Preview 式(3) 预处理后数据形态(缺失处理、标准化后可建模样本)。
Preprocess_Info 式(3) 清洗删除行数、最终样本量、特征数。
X_Scores 式(2)、式(5) 样本在潜变量空间的得分 \(T\),用于聚类/分布解释。
X_Loadings 式(2)、式(9) 变量在潜变量上的载荷 \(P\),用于解释成分含义。
Coefficients 式(12)–式(14) 回归系数 \(B\) 与方向/强度解释。
VIP 式(15) 变量重要性排序,\(\mathrm{VIP}>1\) 常视为关键变量。
Evaluation 式(19)–式(22) 拟合优度与误差指标(\(R^2\)、调整\(R^2\)、RMSE、MAE)。
Explained_Variance 式(16)–式(18) 各成分解释方差与累计解释率,说明成分保留合理性。
Predictions 式(14)、式(20)、式(21) 真实值/预测值/残差明细,用于误差分析与图表复核。
Charts_Index 式(5)、式(9)、式(14)、式(21) 图表文件索引;可对应 score/loading/预测对比/残差诊断图。

12.1 推荐论文表述顺序(与导出结果一致)

  1. Parameters + Preprocess_Info:说明数据来源、变量、样本与预处理。
  2. Evaluation + Explained_Variance:先报告性能,再说明成分解释能力。
  3. VIP + Coefficients:解释关键影响变量及影响方向。
  4. Predictions + Charts_Index 对应图:做拟合效果与残差稳健性说明。

13. 单篇终审补充

13.1 图题与表题对齐建议

  • 本文档应优先对应真实算法目录 具体的算法2/PLSRegression-偏最小二乘(PLS)
  • 代表性结果目录建议绑定 具体的算法2/PLSRegression-偏最小二乘(PLS)/results/pytest_ui_pls_test_window2_regression_robust12_20260329_165410,因为该目录同时具备 xlsx + 图 + repro
  • 表题应直接对应该目录下 PLS分析结果_20260329_165413.xlsx 的真实工作表:ParametersRaw_PreviewProcessed_PreviewPreprocess_InfoX_ScoresX_LoadingsCoefficientsVIPEvaluationExplained_VariancePredictionsCharts_Index
  • 图题应优先绑定同目录的真实图:01_score_plot.png02_loading_plot.png03_biplot.png04_pred_vs_actual.png05_variable_importance.png06_true_vs_pred_line.png07_residual_diagnostics.png

13.2 终审说明

  • 当前 PLS 文档可以使用单个 UI 结果目录形成完整证据链,较适合作为论文示例目录。
  • 复现脚本可直接对应 repro_pls_20260329_165410.py,其 SRC_FILE 写法为 repro_inputs/sample_data.csv,属于“结果目录下 repro_inputs 相对路径复现”口径。
  • 目录中同时存在 PLS分析结果_20260329_165413.xlsxpytest_ui_pls_test_window2_regression_robust12_20260329_165410.xlsx 两个表,正文若引用文件名,建议以前者作为正式分析结果表,后者视为测试链路产物。

13.3 全量强化补充

  • 当前 PLS 文档应绑定真实算法目录 具体的算法2/PLSRegression-偏最小二乘(PLS),代表性结果目录为 具体的算法2/PLSRegression-偏最小二乘(PLS)/results/pytest_ui_pls_test_window2_regression_robust12_20260329_165410
  • 该目录内真实存在两份 xlsx:PLS分析结果_20260329_165413.xlsxpytest_ui_pls_test_window2_regression_robust12_20260329_165410.xlsx。两者当前工作表一致,均为 ParametersRaw_PreviewProcessed_PreviewPreprocess_InfoX_ScoresX_LoadingsCoefficientsVIPEvaluationExplained_VariancePredictionsCharts_Index
  • 当前目录中的主图为 01_score_plot.png02_loading_plot.png03_biplot.png04_pred_vs_actual.png05_variable_importance.png06_true_vs_pred_line.png07_residual_diagnostics.png,全部与工作簿同层放置。
  • 该目录同时包含 repro_pls_20260329_165410.pyrepro_inputs/sample_data.csv,脚本关键输入写法为 SRC_FILE = 'repro_inputs/sample_data.csv'。因此 PLS 属于“单目录内主结果 + 脚本 + repro_inputs”的标准复现结构。
  • 对论文或用户文档而言,应优先把 PLS分析结果_20260329_165413.xlsx 作为正式分析结果表,把 pytest_ui_pls_test_window2_regression_robust12_20260329_165410.xlsx 视为测试链路副本或 UI 链路结果记录。两者不应在正文里被当作两次不同模型输出。
  • 结合真实目录结构,Charts_Index 适合作为图号与文件名索引;EvaluationExplained_Variance 适合作为正文主表;X_ScoresX_LoadingsVIPCoefficients 适合作为解释潜变量和变量重要性的补充表。

14. 软件实现核查补充(2026-07)

  • 当前实现的主结果目录应写作 具体的算法2/PLSRegression-偏最小二乘(PLS)/results/pytest_ui_pls_test_window2_regression_robust12_20260329_165410,主工作簿以 PLS分析结果_20260329_165413.xlsx 为准。
  • 正文应围绕 ParametersRaw_PreviewProcessed_PreviewPreprocess_InfoX_ScoresX_LoadingsCoefficientsVIPEvaluationExplained_VariancePredictionsCharts_Index 来写,不要把 UI 测试副本当成另一套算法输出。
  • 图证应对应同层 01_score_plot.png02_loading_plot.png03_biplot.png04_pred_vs_actual.png05_variable_importance.png06_true_vs_pred_line.png07_residual_diagnostics.png
  • repro_pls_20260329_165410.py + repro_inputs/sample_data.csv 属于标准目录内复现口径,文中可直接按这个路径写,不要写成别的模块目录路径。