AI算法19-偏最小二乘法回归算法Partial Least Squares Regression | PLS
偏最小二乘法回归算法简介
算法概述
偏最小二乘法模型可分为偏最小二乘回归模型和偏最小二乘路径模型。其中偏最小二乘回归模型是一种新型的多元统计方法,它集中了主成分分析、典型相关分析和线性回归的特点,特别在解决回归中的共线性问题具有无可比拟的优势。偏最小二乘回归模型虽然与主成分分析有关系,但它不是寻找响应和独立变量之间最小方差的超平面,而是通过投影预测变量和观测变量到一个新空间来寻找一个线性回归模型。特别当两组变量的个数很多,且存在多重相关性,而观测数据的数量较少时,用偏最小二乘回归建立的模型具有传统的经典回归分析等方法所没有的优点。
偏最小二乘路径模型是偏最小二乘法的应用,可以应用于一些难以直接观测的现象进行分析,也可以考察分析现象之间的关联关系等。偏最小二乘路径模型降低了结构方程需要大量的样本数据,且观测变量服从多元正态分布的要求。模型的工作目标与结构方程模型基本一致,但与结构方程基本协方差矩阵建模的思路不同,偏最小二乘路径模型采用的是一系列一元或多元线性回归的迭代求解。在实际应用中无需对观测变量做特定的概率分布假设,也不存在模型不可识别问题,并且由于采用偏最小二乘法,对样本容量的要求也非常宽松。由此可见,偏最小二乘路径模型是一种更加实用和有效的线性建模方法。
算法发展历史
1975年,在求解实际应用中发现很多的问题不能用结构方程求解,所以伍德等人提出更为简单的分析技术,即偏最小二乘路径模型。与结构方程相比,该方法使用条件更为广泛,效果更好。
1983年,瑞典统计学家Herman Wold和阿巴诺最先提出了最小二乘法,并将其应用于社会科学中;然后由赫曼的儿子Svante Wold发展这个理论。
特别是近十年来,偏最小二乘在理论、方法和应用方面都得到了迅速的发展。密西根大学的佛奈尔教授称偏最小二乘回归为第二代回归方法。
偏最小二乘法回归算法原理
现实问题中的自变量之间往往会存在大量的自相关情况,所以对这类问题使用普通的最小二乘法不能够求解;这是因为变量多重相关性会严重危害参数估计,扩大模型误差,并且破坏模型的稳定性。偏最小二乘法开辟了一种有效的技术途径,它利用对系统中的数据信息进行分解和筛选的方式,提取对因变量的解释性最强的综合变量,辨识系统中的信息与噪声,从而更好地克服变量多重相关性在系统建模中的不良作用。
第一步:对原始数据X和Y进行标准化得到X0和Y0,其中X为m维的数据,Y是p维的数据;从Y0中选择方差最大的一列作为u1,方便后面计算;因为选取方差最大就表示该列是最能反映原始数据信息的一列,即根据主成分分析的思想,我们称这列向量为第一主成分,并使X与Y之间的相关性达最大。
标准化后的矩阵:

第二步:迭代求解X与Y的变换权重(w1,c1)和综合因子(t1,u1),直到收敛;
假设X与Y提取的主成分为t1和u1,t1是自变量集
的线性组合:
,u1是因变量集
的线性组合:
;为了回归分析的需求,需要满足两个要求:t1和u1各自尽可能多的提取所在变量组的变异信息;t1和u1的相关性达到最大。
计算公式:
利用第一步选择的Y中的列,求解X的变换权重因子

利用X的信息t1,求解Y的变换权重c1,并且更新因子u1的值

判断是否已找到合理的解,否则继续寻找。
其中t1和u1的估计方程为:

第三步:求X与Y的残差矩阵;
计算公式:
1.求X的载荷P1,载荷是反映X0和因子T1的直接关系:

2.求X0的残差X1,残差表示了u1不能反映X0信息的部分:
![]()
3.求Y的载荷Q1:
![]()
4.建立X因子t1与Y因子u1之间的回归模型,并用t1预测u1的信息;

5.求Y0的残差Y1,这个值表达了X与因子t1所不能预测的Y0中的信息:

第四步:利用X1与Y1,重复上述步骤,求解下一个主成分的偏最小二乘的参数。
最后得到偏最小二乘回归模型的回归方程,还应该对回归系数进行检验;一般情况下,可以通过交叉有效性检验来确定。交叉有效性检验通过求解预测误差平方和与误差平方和的比值,这个比值越小越好,一般设置的限定值为0.05,所以当该比值越小,增加新的主成分有利于提高模型的精度;反之认为增加新的成分,对减少方程的预测误差无明显的改善作用。
定义交叉有效性:

这样,在建模时每一步计算结束前,均进行交叉有效性检验,如果在第h步有

时模型已达到精度要求,可停止提取成分,若

表示第h步提取的
![]()
成分的边际贡献显著,应继续第h+1步计算。
偏最小二乘法回归算法代码实现
import numpy as npdef pls_regression(X, Y, L):"""偏最小二乘回归算法。参数:X : numpy.ndarray特征矩阵,每一行是一个样本,每一列是一个特征。Y : numpy.ndarray目标矩阵,每一行是一个样本,每一列是一个目标变量。L : int要提取的潜在变量数量。返回:T : numpy.ndarrayX的得分矩阵。U : numpy.ndarrayY的得分矩阵。P : numpy.ndarrayX的权重矩阵。Q : numpy.ndarrayY的权重矩阵。"""n, p = X.shapem, _ = Y.shapeW = np.zeros((p, L))Q = np.zeros((p, L))P = np.zeros((m, L))U = np.zeros((m, L))T = np.zeros((n, L))for i in range(L):# 计算权重向量Xtx = X.T @ XXty = X.T @ YW[:, i] = Xty / np.sqrt(Xtx @ W[:, i])# 计算得分向量T[:, i] = X @ W[:, i]# 计算Y的权重和得分Yty = Y.T @ YU[:, i] = Yty @ W[:, i] / np.linalg.norm(W[:, i])Q[:, i] = Y.T @ U[:, i]# 计算X和Y的权重P[:, i] = Xty @ U[:, i].T / np.linalg.norm(U[:, i])# 去相关X = X - T @ W[:, i].TY = Y - U[:, i] @ Q[:, i].Treturn T, U, P, Q# 示例数据
X = np.random.rand(100, 10) # 100个样本,10个特征
Y = np.random.rand(100, 1) # 100个样本,1个目标变量# 调用PLS回归函数
L = 3 # 假设我们想要3个潜在变量
T, U, P, Q = pls_regression(X, Y, L)# 使用得到的权重和得分进行预测
Y_pred = T @ P.T
偏最小二乘法回归算法优缺点
算法优点:
- 处理多重共线性:PLS能够在自变量存在严重多重相关性的条件下进行回归建模 。
- 样本量少于变量数:允许在样本点个数少于变量个数的条件下进行回归建模 。
- 包含所有自变量:在最终模型中将包含原有的所有自变量 。
- 辨识系统信息与噪声:模型更易于辨识系统信息与噪声,包括一些非随机性的噪声 。
- 易于解释的系数:每一个自变量的回归系数将更容易解释 。
- 预测性能:在提取主成分的过程中,考虑了自变量与因变量之间的关联,使得提取的主成分能同时优化因变量预测性能,因此通常在预测任务上能取得更好的结果 。
- 适用于高通量数据:适用于诸如基因组学、转录组学等高通量数据分析,在这些领域中自变量数目可能大于样本数 。
算法缺点:
- 线性假设限制:PLS回归本身是线性模型,尽管可以处理一定程度的非线性关系,但在非线性关系强烈的场景下可能不如非线性模型有效 。
- 模型选择问题:在PLS中,需要选择合适的潜在变量数量,这可能需要依赖经验和交叉验证来确定 。
- 计算复杂性:相比于简单的线性回归,PLS的计算过程更为复杂,可能需要更多的计算资源。
- 过度依赖主成分:如果主成分不能很好地代表数据的变异性,PLS模型可能无法提供准确的预测 。
- 对异常值敏感:PLS方法可能对数据中的异常值比较敏感,这可能影响模型的稳定性和预测能力 。
偏最小二乘法回归算法应用
偏最小二乘法回归算法(PLS)在多个领域有着广泛的应用,以下是一些常见的应用场景:
- 化学计量学:PLS回归特别适用于处理化学光谱数据分析,例如近红外光谱(NIR)、紫外可见光谱(UV-Vis)、拉曼光谱等。这些光谱数据通常包含大量的变量(如不同波长处的吸光度),并且各变量间可能存在高度相关性。通过PLS回归,研究者可以从复杂的光谱数据中构建预测模型,将光谱信息与样品的化学成分、物理性质或工艺参数等联系起来,实现无损、快速的定量或定性分析 。
- 金融行业:在风险管理中,PLS回归能够处理多种可能具有共线性的财务指标,帮助金融机构预测公司的信用风险、违约概率或其他金融表现指标。通过结合众多的财务报表数据,如资产负债率、流动比率、盈利能力指标等,PLS回归模型可以发现这些变量与潜在违约行为间的非线性关系,从而优化风险评估体系 。
- 生物医学研究:在基因表达数据分析中,PLS回归被用来探索基因表达谱(如RNA测序或微阵列数据)与临床表型(如疾病状态、药物反应、生存率等)之间的关联。由于基因数据通常是高维度且具有噪声,而样本数量相对较少,因此PLS回归能够减少数据维度,并在小样本情况下找到基因表达模式与疾病发展或治疗响应的重要关联 。
- 环境科学:PLS回归在环境科学中被用于分析环境污染物的监测数据,预测环境质量变化趋势。通过处理高维且可能存在多重共线性的环境监测数据,PLS回归可以帮助科学家更准确地预测和评估环境变化 。
- 社会科学:在社会科学研究中,PLS回归常用于分析复杂的社会经济数据,如消费者行为、社会态度等。由于这些数据通常包含多个相关变量,PLS回归能够提取关键因素,建立预测模型 。
- 市场营销和战略管理:PLS回归在市场营销和战略管理中被用来分析消费者满意度、品牌忠诚度等多维数据,帮助企业更好地理解市场动态和消费者需求 。
- 小样本数据分析:PLS回归特别适用于小样本数据的情况。在样本数量较少但变量较多的情况下,PLS回归能够通过提取主成分进行有效的回归分析,避免了传统回归方法在这种情况下可能出现的问题 。
- 高维数据处理:在自变量和因变量维数都很高的情况下,PLS回归通过降维技术,能够提炼出最重要的信息并构建预测模型,提高了模型的解释性和预测性能 。
- 处理多重共线性:PLS回归能够有效克服因变量和自变量之间存在的多重共线性问题,即使自变量之间高度相关,也能通过提取主成分进行有效的回归分析
相关文章:
AI算法19-偏最小二乘法回归算法Partial Least Squares Regression | PLS
偏最小二乘法回归算法简介 算法概述 偏最小二乘法模型可分为偏最小二乘回归模型和偏最小二乘路径模型。其中偏最小二乘回归模型是一种新型的多元统计方法,它集中了主成分分析、典型相关分析和线性回归的特点,特别在解决回归中的共线性问题具有无可比拟…...
live555关于RTSP协议交互流程
RTP在和h264 RTP在和h265 RTP载荷AAC live555关于RTSP协议交互流程 live555的核心数据结构值之闭环双向链表 live555 rtsp服务器实战之createNewStreamSource 概要 rtsp在交互的过程中用到很多协议:tcp,udp,rtp,rtcp,sdp等协议;该篇文章主要分析在live555中这些…...
Centos7 安装私有 Gitlab
在 CentOS 7上,下面的命令也会在系统防火墙中打开 HTTP、HTTPS 和 SSH 访问。这是一个可选步骤,如果您打算仅从本地网络访问极狐GitLab,则可以跳过它。 sudo yum install -y curl policycoreutils-python openssh-server perl sudo systemct…...
浅谈数学模型在UGC/AIGC游戏数值配置调参中的应用(AI智能体)
浅谈数学模型在UGC/AIGC游戏数值配置调参中的应用 ygluu 卢益贵 关键词:UGC、AIGC、AI智能体、大模型、数学模型、游戏数值调参、游戏策划 一、前言 在策划大大群提出《游戏工厂:AI(AIGC/ChatGPT)与流程式游戏开发》讨论之后就…...
第T5周:使用TensorFlow实现运动鞋品牌识别
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 文章目录 一、前期工作1.设置GPU(如果使用的是CPU可以忽略这步)2. 导入数据3. 查看数据 二、数据预处理1、加载数据2、数据可视化3、再…...
网络编程学习之tcp
按下*(星号)可以搜索当前光标下的单词。 Tcp编程的过程 打开网络设备 Bind:给服务地址把ip号和端口号连接进去 Tcp是有状态的 Listen是进入监听状态,看有没有客户端来连接服务器 Tcp比udp消耗过多资源 Upd类似于半双工&#…...
前端XMLHttpRequest、Fetch API、Axios实现文件上传、下载方法及后端Spring文件服务器处理方法
前言 本文总结Web应用开发中文件上传、下载的方法,即从前端表单输入文件并封装表单数据,然后请求后端服务器的处理过程;从基础的JavaScript中XmlHttpRequest对象、Fetch API实现上传、下载进行说明,并给出了前端常用的axios库的请…...
STM32智能交通监测系统教程
目录 引言环境准备智能交通监测系统基础代码实现:实现智能交通监测系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:交通监测与管理问题解决方案与优化收尾与总结 1. 引言 智能交通监测系统通…...
【利用Selenium+autoIt实现文件上传】
利用Selenium+autoIt实现文件上传 利用Selenium+autoIT实现文件上传autoIt脚本制作转换成exe文件java代码运行部分利用Selenium+autoIT实现文件上传 当你看到这篇文章时,证明你遇到了和我一样的难题。正常情况下我们利用selenium完全可以实现表单的提交和文件上传等操作。但当…...
python join
1、join函数 *.join(seq) 以*作为分隔符,将seq所有的元素合并为一个新的字符串 seq ABDWDPO new_seq list(.joint(seq)) # ABDWDPO #[A, B, D, W, D, P, O]...
cython加速python代码
python这个语言在使用的层面上看几乎没有缺点,简单易学,语法简单,唯一的弱点就是慢, 当然了万能的python社区是给了解决方法的,那就是cython 使用Cython可以显著提升Python代码的执行效率,特别是在涉及到数…...
React@16.x(60)Redux@4.x(9)- 实现 applyMiddleware
目录 1,applyMiddleware 原理2,实现2.1,applyMiddleware2.1.1,compose 方法2.1.2,applyMiddleware 2.2,修改 createStore 接上篇文章:Redux中间件介绍。 1,applyMiddleware 原理 R…...
level 6 day1 Linux网络编程之网络基础
v1 网络的历史和分层 TCP 是可靠传输,IP协议是不可靠传输 网络的体系结构 网络分层的思想: OSI体系结构 两层交换机是指数据链路层的交换 三层交换是指网络层这边的交换 四层模型 蓝色的字 是由手机发给PC机,由传输层来决定应该交给哪一…...
PostgreSQL UPDATE 命令
PostgreSQL UPDATE 命令 PostgreSQL 是一种功能强大的开源对象关系型数据库管理系统(ORDBMS),它使用并扩展了SQL语言。在处理数据库时,我们经常需要更新现有的记录。在PostgreSQL中,UPDATE命令用于修改表中的现有记录…...
什么? CSS 将支持 if() 函数了?
CSS Working Group 简称 CSSWG, 在近期的会议中决定将 if() 添加到 CSS Values Module Level 5 中。 详情可见:css-meeting-bot 、[css-values] if() function 当我看到这个消息的时候,心中直呼这很逆天了,我们知道像 less 这些 css 这些预…...
function calling实现调用理杏仁api获取数据
LLM是不存在真正逻辑的且并不是知晓万事万物的(至少目前是这样)在很多更垂直的环境下LLM并不能很好的赋能。 function calling的实现使LLM可以对接真正的世界以及真正有逻辑的系统,这将很大程度上改变LLM的可用范围(当然安全问题依…...
Excel中用VBA实现Outlook发送当前工作簿
Excel中用VBA实现Outlook发送当前工作簿,首先按AltF11打开VBA编辑器,插入模块,并在工具-引用中勾选 Microseft Outlook .0 Object Library(其中为你Microseft Outlook的版本号。 Sub 发送邮件() 保存当前excel ThisWorkbook.Save让excel连接…...
从 ArcMap 迁移到 ArcGIS Pro
许多 ArcMap 用户正在因 ArcGIS Pro 所具有的现代 GIS 桌面工作流优势而向其迁移。 ArcGIS Pro 与其余 ArcGIS 平台紧密集成,使您可以更有效地共享和使用内容。 它还将 2D 和 3D 组合到一个应用程序中,使您可以在同一工程中使用多个地图和多个布局。 Arc…...
WSL2 的安装与运行 Linux 系统
前言 适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 的一项功能,允许开发人员在 Windows 系统上直接安装并使用 Linux 发行版。不用进行任何修改,也无需承担传统虚拟机或双启动设置的开销。 可以将 WSL 看作也是一个虚拟机,但是它更为便…...
业务终端动态分配IP-DHCP技术、DHCP中继技术
一、为什么需要DHCP? 1、许多设备(主机、无线WiFi终端等)需要动态地址的分配; 2、人工手工配置任务繁琐、容易出错,比如:IP地址冲突; 3、网络规模扩大、复杂度提高,网络配置越来越复杂,计算机的位置变化和数量超过可分配IP地址的数量,造成IP地址变法频繁以及IP地址…...
Faster-Whisper-GUI:高效本地语音识别与字幕生成终极指南
Faster-Whisper-GUI:高效本地语音识别与字幕生成终极指南 【免费下载链接】faster-whisper-GUI faster_whisper GUI with PySide6 项目地址: https://gitcode.com/gh_mirrors/fa/faster-whisper-GUI 在人工智能语音技术快速发展的今天,本地化语音…...
卡尔曼滤波在目标跟踪中的应用:原理、建模与工程调参实战
1. 项目概述:从“猜”到“算”的跟踪艺术在目标跟踪这个领域,无论是自动驾驶中预测前车的轨迹,还是无人机锁定移动的物体,亦或是视频监控里框住一个行走的人,我们核心要解决的都是一个问题:如何在充满噪声和…...
别再踩坑了!用Java Arrays.fill()初始化二维数组,这3个细节新手必看
Java二维数组初始化陷阱:为什么Arrays.fill()会让你掉坑里? 刚接触Java二维数组时,很多人会想当然地认为Arrays.fill()是个万能初始化工具,直到某天在算法题中遇到一个诡异的Bug——明明只修改了矩阵的某一行,所有行却…...
ARM弱内存序模型解析:多核并发编程中的内存屏障与同步原语
1. 项目概述:为什么我们需要深入理解ARM的存储一致性模型? 在嵌入式开发、移动计算乃至如今的服务器领域,ARM架构已经无处不在。作为一名长期与底层硬件和操作系统打交道的开发者,我见过太多因对内存模型理解不足而导致的“幽灵”…...
电脑突然‘哑巴’了?保姆级排查指南:从服务、驱动到系统修复,一步步搞定Win10音频问题
电脑突然‘哑巴’了?保姆级排查指南:从服务、驱动到系统修复,一步步搞定Win10音频问题 右下角的小喇叭突然打上红叉,视频会议开到一半突然失声,游戏打到关键处却没了音效——这些场景恐怕每个Windows 10用户都遭遇过。…...
aFileChooser架构设计分析:Fragment、Loader和Intent的最佳实践
aFileChooser架构设计分析:Fragment、Loader和Intent的最佳实践 【免费下载链接】aFileChooser [DEPRECATED] Android library that provides a file explorer to let users select files on external storage. 项目地址: https://gitcode.com/gh_mirrors/af/aFil…...
Kafka-UI:3分钟快速上手,轻松管理你的Apache Kafka集群
Kafka-UI:3分钟快速上手,轻松管理你的Apache Kafka集群 【免费下载链接】kafka-ui Open-Source Web UI for managing Apache Kafka clusters 项目地址: https://gitcode.com/gh_mirrors/kaf/kafka-ui 你是否曾经为管理Apache Kafka集群而头疼&…...
用Python实现迷宫寻路:从BFS到‘灌水算法’的保姆级代码解析
Python迷宫寻路算法实战:从BFS到动态赋值的完整实现指南 迷宫寻路问题是计算机科学中经典的算法应用场景,也是游戏开发、机器人导航等领域的核心技术之一。本文将带领你从最基础的广度优先搜索(BFS)算法开始,逐步深入到…...
ATxmega时钟与GPIO配置详解:从原理到实战代码
1. 项目概述:从零开始认识ATxmage的时钟与GPIO最近在整理一些嵌入式开发的入门资料,发现很多刚接触ATxmage系列微控制器的朋友,拿到开发板后往往第一步就卡在了最基础的时钟配置和引脚操作上。这其实很正常,因为这两个模块是整个系…...
蓝桥杯JavaB组赛后复盘:从‘类斐波那契’到‘星际旅行’,我的解题思路与踩坑实录
蓝桥杯JavaB组赛后复盘:从‘类斐波那契’到‘星际旅行’,我的解题思路与踩坑实录 1. 考场策略与时间分配 比赛开始前15分钟,我快速浏览了所有题目,用铅笔在草稿纸上标注了每道题的预估难度和解题方向。这种策略让我避免了"死…...
