偏最小二乘回归分析:原理、算法与实现

偏最小二乘回归分析:原理、算法与实现

内容摘要
本文详细解析偏最小二乘回归(PLS)的核心原理与建模方法,对比其与主成分回归(PCR)、多元线性回归(MLR)的优势。从成分提取、协方差最大化、残差迭代到交叉有效性检验,逐步推导PLS算法流程,并给出简洁计算版本。结合矩阵运算公式与案例分析,阐明如何解决多重共线性和小样本问题,为高维数据分析提供实用指导。

关键词:偏最小二乘回归 成分提取 交叉验证 多重共线性 残差矩阵


1. PLS回归概述与应用场景

偏最小二乘回归(Partial Least Squares Regression, PLS)是一种多变量统计分析方法,适用于两组变量间依赖关系建模的场景。当自变量与因变量均存在多重相关性,且样本量较少时,PLS能有效克服传统回归方法的局限性,广泛应用于化学、经济学、生物信息学等领域。

PLS vs. PCR vs. MLR

  • 多元线性回归(MLR):直接建立因变量与自变量的线性关系,但要求自变量独立且样本量充足,否则易过拟合。
  • 主成分回归(PCR):通过提取自变量主成分降维,但未考虑因变量信息,可能导致信息损失。
  • 偏最小二乘回归(PLS):同时提取自变量和因变量的成分,并最大化其协方差,兼顾降维与相关性,适合高维小样本数据。

2. PLS建模步骤详解

2.1 问题定义与数据标准化

设有ppp个因变量y1,y2,…,ypy_1, y_2, \dots, y_py1​,y2​,…,yp​和mmm个自变量x1,x2,…,xmx_1, x_2, \dots, x_mx1​,x2​,…,xm​,观测数据已标准化。标准化后的自变量矩阵E0E_0E0​和因变量矩阵F0F_0F0​分别为:
E0=[x11⋯x1m⋮⋱⋮xn1⋯xnm],F0=[y11⋯y1p⋮⋱⋮yn1⋯ynp] E_0 = \begin{bmatrix} x_{11} & \cdots & x_{1m} \\ \vdots & \ddots & \vdots \\ x_{n1} & \cdots & x_{nm} \end{bmatrix}, \quad F_0 = \begin{bmatrix} y_{11} & \cdots & y_{1p} \\ \vdots & \ddots & \vdots \\ y_{n1} & \cdots & y_{np} \end{bmatrix} E0​=​x11​⋮xn1​​⋯⋱⋯​x1m​⋮xnm​​​,F0​=​y11​⋮yn1​​⋯⋱⋯​y1p​⋮ynp​​​

2.2 成分提取与协方差最大化

第一步:提取第一对成分

  • 自变量成分t1t_1t1​:t1=w11x1+w12x2+⋯+w1mxm=w1TXt_1 = w_{11}x_1 + w_{12}x_2 + \cdots + w_{1m}x_m = \mathbf{w}_1^T Xt1​=w11​x1​+w12​x2​+⋯+w1m​xm​=w1T​X
  • 因变量成分u1u_1u1​:u1=v11y1+v12y2+⋯+v1pyp=v1TYu_1 = v_{11}y_1 + v_{12}y_2 + \cdots + v_{1p}y_p = \mathbf{v}_1^T Yu1​=v11​y1​+v12​y2​+⋯+v1p​yp​=v1T​Y

目标为最大化t1t_1t1​与u1u_1u1​的协方差,并保证成分携带原变量组的最大变异信息。数学上转化为优化问题:
{max⁡w1TE0TF0v1s.t. ∥w1∥=1,∥v1∥=1 \begin{cases} \max \mathbf{w}_1^T E_0^T F_0 \mathbf{v}_1 \\ \text{s.t. } \|\mathbf{w}_1\| = 1, \|\mathbf{v}_1\| = 1 \end{cases} {maxw1T​E0T​F0​v1​s.t. ∥w1​∥=1,∥v1​∥=1​
通过求解矩阵M=E0TF0F0TE0M = E_0^T F_0 F_0^T E_0M=E0T​F0​F0T​E0​的最大特征值对应的特征向量w1\mathbf{w}_1w1​,并计算v1=1θ1F0TE0w1\mathbf{v}_1 = \frac{1}{\theta_1} F_0^T E_0 \mathbf{w}_1v1​=θ1​1​F0T​E0​w1​,得到第一对成分。

第二步:建立回归模型
利用成分t1t_1t1​,分别对自变量和因变量建立回归模型:
{E0=t^1α1T+E1F0=t^1β1T+F1 \begin{cases} E_0 = \hat{t}_1 \boldsymbol{\alpha}_1^T + E_1 \\ F_0 = \hat{t}_1 \boldsymbol{\beta}_1^T + F_1 \end{cases} {E0​=t^1​α1T​+E1​F0​=t^1​β1T​+F1​​
其中,回归系数α1\boldsymbol{\alpha}_1α1​和β1\boldsymbol{\beta}_1β1​通过最小二乘估计:
α1=E0Tt^1∥t^1∥2,β1=F0Tt^1∥t^1∥2 \boldsymbol{\alpha}_1 = \frac{E_0^T \hat{t}_1}{\|\hat{t}_1\|^2}, \quad \boldsymbol{\beta}_1 = \frac{F_0^T \hat{t}_1}{\|\hat{t}_1\|^2} α1​=∥t^1​∥2E0T​t^1​​,β1​=∥t^1​∥2F0T​t^1​​

第三步:残差迭代
用残差矩阵E1E_1E1​和F1F_1F1​代替原矩阵,重复上述步骤提取后续成分t2,t3,…,trt_2, t_3, \dots, t_rt2​,t3​,…,tr​,直到满足精度要求。


3. 交叉有效性检验

PLS需确定提取的成分个数lll,以避免过拟合。通过交叉验证计算预测误差平方和(PRESS)与误差平方和(SS):

  • PRESS:剔除第iii个样本后建模的预测误差平方和。
  • SS:全样本建模的误差平方和。

定义交叉有效性指标Qh2=1−PRESS(h)SS(h−1)Q_h^2 = 1 - \frac{\text{PRESS}(h)}{\text{SS}(h-1)}Qh2​=1−SS(h−1)PRESS(h)​,若Qh2<0.0975Q_h^2 < 0.0975Qh2​<0.0975,则停止提取成分。


4. 简洁算法:无需因变量成分提取

传统PLS需同时提取自变量和因变量成分,而简洁算法仅需在自变量残差矩阵中迭代提取成分,简化计算:

  1. 计算E0TF0F0TE0E_0^T F_0 F_0^T E_0E0T​F0​F0T​E0​的最大特征向量w1\mathbf{w}_1w1​,得到t1=E0w1t_1 = E_0 \mathbf{w}_1t1​=E0​w1​。
  2. 更新残差矩阵E1=E0−t1α1TE_1 = E_0 - t_1 \boldsymbol{\alpha}_1^TE1​=E0​−t1​α1T​。
  3. 重复步骤,提取后续成分t2,…,trt_2, \dots, t_rt2​,…,tr​。

最终回归方程为:
Y=t1β1+t2β2+⋯+trβr Y = t_1 \boldsymbol{\beta}_1 + t_2 \boldsymbol{\beta}_2 + \cdots + t_r \boldsymbol{\beta}_r Y=t1​β1​+t2​β2​+⋯+tr​βr​
将成分tit_iti​还原为原始自变量,即得PLS回归方程。


5. 关键公式总结

  1. 成分得分向量
    t^h=Eh−1wh,wh=arg⁡max⁡wTEh−1TF0F0TEh−1w \hat{t}_h = E_{h-1} \mathbf{w}_h, \quad \mathbf{w}_h = \arg \max \mathbf{w}^T E_{h-1}^T F_0 F_0^T E_{h-1} \mathbf{w} t^h​=Eh−1​wh​,wh​=argmaxwTEh−1T​F0​F0T​Eh−1​w
  2. 回归系数
    βh=F0Tt^h∥t^h∥2 \boldsymbol{\beta}_h = \frac{F_0^T \hat{t}_h}{\|\hat{t}_h\|^2} βh​=∥t^h​∥2F0T​t^h​​
  3. 交叉有效性条件
    Qh2≥0.0975⇒继续提取成分;否则终止。 Q_h^2 \geq 0.0975 \Rightarrow \text{继续提取成分;否则终止。} Qh2​≥0.0975⇒继续提取成分;否则终止。

6. 结语

PLS通过成分提取与协方差最大化,巧妙解决了高维数据中的多重共线性和小样本问题。结合交叉验证,可灵活控制模型复杂度,是数据分析中的强有力工具。实际应用中需注意数据标准化、成分数选择及结果的可解释性优化。

Read more

Flutter 组件 short_uuids 适配鸿蒙 HarmonyOS 实战:唯一标识微缩技术,构建高性能短 ID 生成与分布式索引架构

Flutter 组件 short_uuids 适配鸿蒙 HarmonyOS 实战:唯一标识微缩技术,构建高性能短 ID 生成与分布式索引架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 short_uuids 适配鸿蒙 HarmonyOS 实战:唯一标识微缩技术,构建高性能短 ID 生成与分布式索引架构 前言 在鸿蒙(OpenHarmony)生态迈向万物互联、涉及海量离线资源标识、蓝牙广播载荷(BLE Payload)及二维码数据极限压缩的背景下,如何生成既能保留 UUID 强随机性、又能极大缩减字符长度的唯一标识符,已成为优化存储与通讯效率的“空间必修课”。在鸿蒙设备这类强调分布式软总线传输与每一字节功耗敏感的环境下,如果应用依然直接传输长度达 36 字符的标准 UUID,由于由于有效载荷溢出,极易由于由于传输协议限制导致数据截断或多次分包带来的延迟。 我们需要一种能够实现高进制转换、支持双向编解码且具备低碰撞概率的短 ID 生成方案。 short_uuids 为 Flutter 开发者引入了将标准 UUID 转化为短格式字符串的高性能算法。它利用

By Ne0inhk
【超详细教程】Claude Code 在 Linux(Ubuntu) 上的完整安装部署指南|一步步跑通云端/本地开发环境

【超详细教程】Claude Code 在 Linux(Ubuntu) 上的完整安装部署指南|一步步跑通云端/本地开发环境

目录 ✅ 逐步安装命令(复制即用) 步骤 1:更新系统环境(强烈建议先执行) 步骤 2:安装 Node.js 步骤 3:安装 Git 步骤 4:安装 Claude Code CLI 步骤 5:配置 Claude Code 的环境变量(核心步骤) 步骤 6:首次运行 Claude Code(本地模式) ✅ 写到最后 之前的文章( Win11 下从零部署 Claude Code )里,我们已经带大家在 Win11 环境下完整跑通了 Claude Code 的本地开发环境,不少朋友后台留言说: “能不能写一个

By Ne0inhk
Flutter 三方库 remove_markdown 的鸿蒙化适配指南 - 打造纯净文本提取、内容预处理实战、鸿蒙级文本解析专家

Flutter 三方库 remove_markdown 的鸿蒙化适配指南 - 打造纯净文本提取、内容预处理实战、鸿蒙级文本解析专家

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 remove_markdown 的鸿蒙化适配指南 - 打造纯净文本提取、内容预处理实战、鸿蒙级文本解析专家 在鸿蒙跨平台应用处理海量的 Markdown 博文、技术文档或用户输入的富文本内容时,有时我们需要剥离所有的样式标记(如加粗、链接、列表),还原出最原始、最纯洁的文字内容。如果你需要为搜索索引构建、智能语音播报(TTS)或是内容摘要生成提供高质量的数据源。今天我们要深度解析的 remove_markdown——一个专注于高效、无损 Markdown 语法剥离的轻量级 Dart 库,正是帮你实现“内容减负”的核心引擎。 前言 remove_markdown 是一套基于正则表达式与高效字符扫描的转换工具。它的设计初衷极其明确:将复杂的 Markdown 源码瞬间坍缩为易于阅读和处理的纯文本。在鸿蒙端项目中,利用它你可以确保在展示搜索片段(

By Ne0inhk

Flutter 三方库 jaguar 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、透明、全能的工业级嵌入式 HTTP 服务端框架与 REST API 交互引擎

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 jaguar 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、透明、全能的工业级嵌入式 HTTP 服务端框架与 REST API 交互引擎 在鸿蒙(OpenHarmony)系统的端侧服务器化、分布式设备互联监控、或者是需要将鸿蒙应用转变为一个能够提供 API 服务的微型网关(如鸿蒙版物联网中枢)场景中,如何通过一套 Dart 代码构建出极致稳健、带路由拦截、支持 Session 且完全透明的 HTTP 服务?jaguar 为开发者提供了一套工业级的、基于生产环境优化的服务端处理方案。本文将深入实战其在鸿蒙端侧服务化中的应用。 前言 什么是 Jaguar?它不是一个普通的 HTTP 监听器,而是一个专为“速度”与“扩展性”

By Ne0inhk