【数学建模】偏最小二乘回归分析(PLSR)
PLSR的基本原理与推导,我在这篇博客中有讲过。
0.
偏最小二乘回归集成了多元线性回归、主成分分析和典型相关分析的优点,在建模中是一个更好的选择,并且MATLAB提供了完整的实现,应用时主要的问题是:
- 注意检验,各种检验参数:有关回归的检验以及有关多元分析的检验
- 系数众多,容易混淆
- 要清楚原理才能写好论文
- 注意matlab函数plsregress的众多返回值
- 例如累计贡献度,建模时最好列出表格
1.
问题:
自变量组 X = [x1,x2…xn] (n组自变量)
因变量组 Y = [y1,y2,…yp] (p组因变量)
考虑到X、Y内部之间的多重相关性,可以使用PLSR建立Y对X的多元回归模型。这是一种多对多回归的模型。
偏最小二乘回归的实现步骤:
- X、Y标准化。若考虑标准化的不对等特性,考虑实现对应分析。
- 求相关系数矩阵。可以把X、Y统一放到一个增广矩阵中,实现求列向量之间的相关系数矩阵(corrcoef实现无需标准化,直接使用原始数据)
- 求主成分对。(求出自变量与因变量的成分,类似于典型相关分析)这里对数其实是min(n-1,p)。求出<u1,v1>、<u2,v2>… 实际上,u、v是原始变量标准化后的线性组合、即投影。
- 计算贡献率表格。计算前k个主成分u对原始变量X的贡献率、v对Y的贡献率(函数直接返回结果)。
- 根据贡献率表格,选取k个主成分对。一般累计贡献率达到90%合适。
- 求出原始变量X对这k个主成分u的回归方程以及Y对u的(不是v!)回归方程。
- 根据6的结果,可以求出因变量组Y与自变量组X的回归方程,但这其实是标准化了的(常数项一定是0),进一步可以还原为真实原始变量的回归方程,这也是我们所要求得的。
- 模型的解释与检验。
- 首先得进行一个回归检验:判定系数R方的检验(接近于1)。计算每一个回归方程的R方,可以列出表格。
- 之后进行交叉有效性检验:交叉系数Qh方 = 1 – (PRESS(h) / SS(h-1))。这是从主成分分析的角度的检验,即检验提取的k个主成分。(这个检验比较复杂,详细看推导)
2.
MATLAB实现命令:
[XL,YL,XS,YS,BETA,PCTVAR,MSE,stats] = plsregress(X,Y,ncomp)
param:
X: 标准化后的原始X数据,每行一个数据组,每列是一项指标,即一个自变量
Y:标准化后的原始Y数据,每行一个数据组,每列是一项指标,即一个因变量
ncomp:选取的主成分对数
return:
XL:自变量的负荷量矩阵。维度是(自变量数*ncomp)。每行是原始数据X对主成分u的回归表达式的系数
YL:因变量的负荷量矩阵。维度是(自变量数*ncomp)。每行是原始数据Y对主成分u的回归表达式的系数
XS:对应于主成分u的得分矩阵(得分说的是主成分的值)。每列是一个主成分得分向量。
如:每一列是一个主成分ui的值!列数是主成分数。
说明:主成分u1是个列向量.
YS:对应于主成分v的得分矩阵。每列是一个v对原始数据Y的线性组合的系数
BETA:最终的回归表达式系数矩阵。每一列对应的,是一个yi对X的回归表达式系数。
PCTVAR:两行的矩阵。
第一行的每个元素代表着自变量提出主成分,相应主成分u的贡献率。(特征值之比,详细见主成分推导)
第二行的每个元素代表着因变量提出主成分,相应主成分v的贡献率。这个贡献率其实是主成分对原始变量的解释能力大下。
MSE:两行的矩阵。剩余标准差矩阵。第一行的第j个元素对应着自变量与他的前j-1个提出成分之间的剩余标准差。第二行对应因变量。
stats:返回4个值。结构体:stats。
W — A p-by-ncomp matrix of PLS weights so that XS = X0*W.
W = a\XS。 W每行是一个主成分得分向量的系数,如:
T2 — The T2 statistic for each point in XS.
Xresiduals — The predictor residuals, that is, X0-XS*XL'.
Yresiduals — The response residuals, that is, Y0-XS*YL'.
3.
案例实现:
求Y对X的偏最小二乘回归方程:
原始数据:
(前三列为X变量,后两列为Y变量,共20组样本。以下数据保存为pz.txt与matlab源文件同一文件夹下)
% PLSR 偏最小二乘 clc,clear
ab0 = load('pz.txt');
mu = mean(ab0);%均值
sig = std(ab0);% 标准差
rr = corrcoef(ab0) %相关系数矩阵
ab = zscore(ab0); %数据标准化
a = ab(:,[:]); %标准化的X
b = ab(:,[:end]); %标准化的Y
% pls命令需要标准化变量
[XL,YL,XS,YS,BETA,PCTVAR,MSE,stats] = plsregress(a,b)
contr = cumsum(PCTVAR,) %每行累计求和,即计算累计贡献率
XL
YL
XS
YS
xw = a\XS %自变量提出主成分系数,每列对应一个成分,这个就是stats.W
yw = b\YS %因变量提出的主成分系数
ncomp = input('输入主成分个数')
[XL2,YL2,XS2,YS2,BETA2,PCTVAR2,MSE2,stats2] = plsregress(a,b,ncomp)
n = size(a,);% n是自变量个数
m = size(b,);
%求原始数据回归方程常数项
beta3(,:) = mu(n+:end) - mu(:n)./sig(:n)*BETA2([:end],:).*sig(n+:end);
%求原始数据x1,x2...xn的系数,每一列是一个回归方程
beta3([:n+],:) = (./sig(:n))'*sig(n+1:end).*BETA2([2:end],:)
bar(BETA2','k') %画直方图求解结果(部分)
假设采用2个主成分
ncomp =
2
系数:
XL2 =-4.1306 0.0558
-4.1933 1.0239
2.2264 3.4441YL2 =
2.1191 -0.9714
2.5809 -0.8398
0.8869 -0.1877主成分得分(每列一个主成分):
XS2 =-0.1036 -0.2050
-0.1241 -0.0577
-0.1463 0.1807
0.1110 0.2358
-0.0785 -0.3927
-0.0369 0.0249
-0.2263 0.0263
0.1199 0.0730
0.2765 0.2263
0.1874 -0.0577
0.0588 -0.2428
0.1198 -0.2420
0.1913 0.2625
-0.7077 0.2635
-0.1327 -0.3375
-0.1208 0.1803
-0.0633 0.0707
0.1933 -0.2712
0.1690 -0.1291
0.3131 0.3917YS2 =
-1.2834 0.1794
-4.6311 1.3388
-0.2845 -0.6256
-1.2265 0.6851
1.6002 -1.0788
-4.5120 1.5408
-2.9777 -0.0114
-2.7548 1.5473
3.9469 -0.4253
10.4846 -2.6373
1.4139 -0.6681
4.8549 -1.1547
5.2890 -1.0550
-7.6800 -0.1989
-5.1793 1.2090
4.5405 -2.0460
-6.4973 2.0374
4.2728 -0.6046
5.5489 -1.3537
-4.9251 3.3215标准化数据回归方程系数(可以看到常数项系数是0)
BETA2 =0.0000 0.0000 0.0000
-0.0773 -0.1380 -0.0603
-0.4995 -0.5250 -0.1559
-0.1323 -0.0855 -0.0072贡献率:
PCTVAR2 =0.6948 0.2265
0.2094 0.0295剩余标准差:
MSE2 =2.8500 0.8699 0.2242
2.8500 2.2531 2.1689stats2 =
W: [3x2 double]
T2: [20x1 double]
Xresiduals: [20x3 double]
Yresiduals: [20x3 double]最终的回归方程系数矩阵,每列一个方程:
beta3 =47.0375 612.7674 183.9130
-0.0165 -0.3497 -0.1253
-0.8246 -10.2576 -2.4964
-0.0970 -0.7422 -0.0510画出回归系数直方图:
还可以用预测的方法做精度分析,在此略过。
【数学建模】偏最小二乘回归分析(PLSR)的更多相关文章
- 偏最小二乘回归分析建模步骤的R实现(康复俱乐部20名成员测试数据)+补充pls回归系数矩阵的算法实现
kf=read.csv('d:/kf.csv') # 读取康复数据kfsl=as.matrix(kf[,1:3]) #生成生理指标矩阵xl=as.matrix(kf[,4:6]) #生成训练指标矩阵x ...
- 【数学建模】day08-数理统计III
2. 回归分析 回归分析与曲线拟合区分. 曲线拟合是,根据得到的若干有关变量的一组数据,寻找因变量与(一个或几个)自变量之间的一个函数,使这个函数对那组数据拟合得好.通常,函数的形式可以由经验.先验知 ...
- 数学建模:1.概述& 监督学习--回归分析模型
数学建模概述 监督学习-回归分析(线性回归) 监督学习-分类分析(KNN最邻近分类) 非监督学习-聚类(PCA主成分分析& K-means聚类) 随机算法-蒙特卡洛算法 1.回归分析 在统计学 ...
- 【建模应用】PLS偏最小二乘回归原理与应用
@author:Andrew.Du 声明:本文为原创,转载请注明出处:http://www.cnblogs.com/duye/p/9031511.html,谢谢. 一.前言 1.目的: 我写这篇文章的 ...
- 偏最小二乘回归(PLSR)- 1 概览
1. 概览 偏最小二乘算法,因其仅仅利用数据X和Y中部分信息(partial information)来建模,所以得此名字.其总体处理框架体现在下面两图中. 建议先看第2部分,对pls算法有初步了解后 ...
- 在数学建模中学MATLAB
为期三周的数学建模国赛培训昨天正式结束了,还是有一定的收获的,尤其是在MATLAB的使用上. 1. 一些MATLAB的基础性东西: 元胞数组的使用:http://blog.csdn.net/z1137 ...
- BITED数学建模七日谈之三:怎样进行论文阅读
前两天,我和大家谈了如何阅读教材和备战数模比赛应该积累的内容,本文进入到数学建模七日谈第三天:怎样进行论文阅读. 大家也许看过大量的数学模型的书籍,学过很多相关的课程,但是若没有真刀真枪地看过论文,进 ...
- 2017 年“认证杯”数学中国数学建模网络挑战赛 C题思路讲解
之前有小伙伴私信我叫我说说这次比赛C题的思路,怎么写的,我就写篇博客说说吧,仅供参考! 针对C题,该题目比较综合,是一个成熟的数模赛题,与国赛的相似性较高.一般而言,第一问难度较低,题目要求进行数据挖 ...
- 【数学建模】day07-数理统计II
方差分析和回归分析. 用数理统计分析试验结果.鉴别各因素对结果影响程度的方法称为方差分析(Analysis Of Variance),记作 ANOVA. 比如:从用不同工艺制作成的灯泡中,各自抽取了若 ...
随机推荐
- 面试题之(vue生命周期)
在面试的时候,vue生命周期被考察的很频繁. 什么是vue生命周期呢? Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.卸载等一系列过程,我们称这 ...
- MATLAB 中 ksvdbox和ompbox 工具箱的安装和使用
下载工具箱 链接: http://www.cs.technion.ac.il/~ronrubin/software.html 下载好工具箱之后, 要将解压后的文件夹添加到MATLAB的安装目录下的to ...
- 轨迹系列7——Socket总结及实现基于TCP或UDP的809协议方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在上一篇博客中我详细介绍了809协议的内容.809协议规范了通 ...
- 12月16日广州.NET俱乐部下午4点爬白云山活动
正如我们在<广州.NET微软技术俱乐部与其他技术群的区别>和<广州.NET微软技术俱乐部每周三五晚周日下午爬白云山活动>里面提到的, 我们会在每周三五晚和周日下午爬白云山. ...
- 想要在launcher中模拟按home键。
Intent mHomeIntent = new Intent(Intent.ACTION_MAIN); mHomeIntent.addCategory(Intent.CATEGORY_HOME); ...
- 微信小程序(五) 利用模板动态加载数据
利用模板动态加载数据,其实是对上一节静态数据替换成动态数据:
- Linux下创建桌面快捷方式
建立一个文本文件,文件名必须以.desktop结尾,.desktop前面的作为快捷方式的名称 添加如下内容 [Desktop Entry]Encoding=UTF-8Name=PostmanExec= ...
- Can't create/write to file '/tmp/MLjnvU95' (Errcode: 13 - Permission denied)
今天一个同事反馈往一个MySQL数据库导入数据时,报"ERROR 1 (HY000): Can't create/write to file '/tmp/MLjnvU95' (Errcode ...
- 网络中的NAT模式
一.概述 NAT英文全称是"Network Address Translation",中文意思是"网络地址转换",它是一个IETF(Internet Engin ...
- 【转载】FPGA算法映射要点
近期一直在学习利用FPGA完成算法的定点运算,转载些相关的博客方面回顾查找.本博文原文链接为:https://blog.csdn.net/u013989284/article/details/7899 ...
