偏最小二乘法(NIPALS经典实现--未简化)
偏最小二乘法(PLS)的实现方式的很多,在理解优化版的PLS代码之前,有必要理解最原始的PLS思想。网上关于PLS的资料已是浩如烟海,但看完总觉得在理解上差一些,没有比较好的代码可以一步一步跟踪。本文的目的是力求实现一遍最原始的PLS算法NIPALS,推导其中的过程并给出matlab实现。看PLS代码时,总是头痛于代码表述和原理有些出入,我希望自己的代码能将两者统一起来,方便大家理解。
这个PLS虽小,但是算小算法里的集大成者。我们可以看到其中PCA,SVD,CCA,LS等算法的影子。“今晚是首次独家大揭露。为了让大家能够看得清楚,我们一连五晚不断地重复、重复再重复整个的解剖过程,务求让大家能够重复、重复再重复地看个仔细。”
偏最小二乘法原理
对于给定Y,X,采用偏最小二乘法建立其Y,X之间的关系,其实现过程如下
1.将X,Y 标准化,分别得到E,F
2.计算投影轴w,v,使得Conv(E*w,F*v)最大
由于E和F已经标准化,其协方差为
拉格朗日乘子法
对v,w求偏导数
上面两式分别乘以 wT,vT 得到
将 带入
同理可以得到
由于在奇异分解SVD和PCA那两章我们已经讨论过这种情况,
w 是矩阵最大特征值对应的向量,,因此只需要计算w就足够了。
3 计算个投影得分向量t = E*w ,u =F*v
有些郁闷,t居然不是由w展开,作为E中提取的第一个矩阵形式的成分。显然w并非E的特征向量,它并不能保证由它展开矩阵提取到最多的成分。但是,w和p确实存在一定的关系
再观察一下p的意义
w是F'E最大特征值对应的特征向量, 将自相关协方差矩阵E'E投到w上,确实不好理解。姑且就看看p是怎么求得的吧
p将t粘到E列空间中,希望两者差距越小越好,根据最小二乘法,E将各列分别投影到 t的单位向量上,使得误差最小,各列的投影长度构成了p
4 计算残差
用E*,F*代替 E,F,跳到第2步,继续求t,p,r。一般而言,迭代次数不多于X的秩。PLS有一个根据残差自动停止的算法,这里为了简化程序,暂时不研究,后续再展开
5 建模
可以证明,w和t都两两正交,这里暂时不展开。从上式,我们可以知道,要建立模型,只需要求出t,p,r,其余无关的不需要计算
最终我们要建立X,y的模型,对上式进行整理
令
求得系数
这里,已经建立了标准化后的F和E的关系,可以通过简单的转换,变成标准化前的参数
代码实战
代码改自参考条目1中的代码,但基本重新实现了一遍
下面,用一个实例去解释这段代码运行过程。
function [beta] = myplsregress1(X,Y,ncomp)
%{Input:X,Y --------输入ncomp-------潜在因子,提取的成分数量output:beta---------模型系数中间变量解释E,F----------X,Y标准后的数据w ----------E的投影轴t ----------E的得分p------------E的回归系数r -----------F的回归系数chg----------残差变换矩阵z = chg*w-----用于计算得分t = E*z大写代表矩阵,小写代表向量同时也约定,W代表由w的矩阵
%}
[E,MU_x,SIGMA_x]=zscore(X); [F,MU_y,SIGMA_y] = zscore(Y); %数据标准化,变量记做 E和 F
n=size(X,2);m=size(Y,2); %n 是自变量的个数,m 是因变量的个数
num=size(X,1);%求样本点的个数
chg=eye(n); %残差转换矩阵
for i=1:ncompmatrix=E'*F*F'*E;[U1,S1,V1]=svd(matrix);w=V1(:,1); %提出最大特征值对应的特征向量Z(:,i)=chg*w; %计算zt=E*w; %计算成分 tp=E'*t/(t'*t); r= F'*t/(t'*t); R(:,i) = r;chg=chg*(eye(n)-w*p'); %计算残差矩阵的变换矩阵E=E-t*p'; %可以直接用chg变换阵F = F-t*r';
end
B = Z*R';
%系数变换
for i=1:mb = MU_y(1,i)-sum(B(:,i)'.*MU_x./SIGMA_x)*SIGMA_y(1,i);coeff = B(:,i)'./SIGMA_x*SIGMA_y(1,i);beta(:,i) =[b coeff]';
end
end
除掉注释,没几条代码,枉费前面那一大堆推理。
测试
load spectra
[xl,yl,xs,ys,beta,pctvar,mse] = plsregress(NIR,octane,10);
plot(octane,'g');hold on;
plsfit = [ones(size(NIR,1),1) NIR]*beta;
plot(plsfit ,'r');
beta = myplsregress1(NIR,octane,10);
myplsfit= [ones(size(NIR,1),1) NIR]*beta;
plot(myplsfit ,'b');
效果上和matlab自带的plsregress接近,但肯定会有差别,后续的小目标是实现一个和matlab自带plsregress一样的版本,最终还是实现数种简化版本的PLS以及相应过程的推导。
PLS潜在变量构造的几何解释
OLS,PCA,CCA,PLS和CR的关系总结及几何解释
参考:
【建模应用】PLS偏最小二乘回归原理与应用 - pigcv - 博客园
《数学建模算法与引用》
偏最小二乘法(NIPALS经典实现--未简化)相关推荐
- matlab pls rmsecv,偏最小二乘法PLS回归NIPALS算法及Matlab程序及例子.doc
偏最小二乘法PLS回归NIPALS算法及Matlab程序及例子 偏最小二乘法PLS回归NIPALS算法的Matlab程序及例子 function [T,P,W,Wstar,U,b,C,B_pls,.. ...
- 偏最小二乘法 Partial Least square
最小二乘法:http://baike.so.com/doc/723226.html 偏最小二乘法(Partial Least square) http://blog.sciencenet.cn/blo ...
- 偏最小二乘法中的权值w和载荷p
先介绍一下奇异值分解,也称为谱分解 A=UΣVTA = U\Sigma V^T A=UΣVT 这里UUU称为左奇异向量,VVV称为右奇异向量,Σ\SigmaΣ为奇异矩阵. 奇异值分解常常用来做低秩逼近 ...
- 关系模式最小依赖集怎么求_偏最小二乘法的原理与实现
偏最小二乘法的原理与实现 近几年来,机器学习在各个领域都有不错的表现,在生物信息领域也有相关的应用.然而,在诸如基因组学.转录组学.蛋白组学以及代谢组学等高通量数据的一大特点是特征量多.样本数少. 以 ...
- H.264视频质量评价算法(基于偏最小二乘法回归)
Zhiyuan Shi等人(这是中国人写的,但是我没看见中文论文,厦门大学的)在论文<Research on Quality Assessment Metric Based on H.264/A ...
- 回归预测 | MATLAB实现PLS(偏最小二乘法)和PCR(主成分回归)多输入单输出
回归预测 | MATLAB实现PLS(偏最小二乘法)和PCR(主成分回归)多输入单输出 目录 回归预测 | MATLAB实现PLS(偏最小二乘法)和PCR(主成分回归)多输入单输出 预测效果 基本介绍 ...
- Matlab中的偏最小二乘法(PLS)回归模型,离群点检测和变量选择
全文下载:http://tecdat.cn/?p=22319 本文建立偏最小二乘法(PLS)回归(PLSR)模型,以及预测性能评估.为了建立一个可靠的模型,我们还实现了一些常用的离群点检测和变量选择方 ...
- 【四足机器人支撑腿反作用力规划】未简化的动力学模型规划反作用力 +运动学模型雅可比+虚功原理规划关节扭矩方法
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.基于动力学模型的工作空间控制框图 二.原理推导 三.缺点 前言 ...
- 最小二乘模型 matlab程序,我提供给大家一个偏最小二乘法的代码
下面是一个偏最小二乘法的完整代码,就是结果不尽如人意,望高人指点一二! 实测数据矩阵: X = [ 30 405 1.5 47.5 40 435 3.0 45.0 50 465 1.0 42.5 60 ...
- python偏最小二乘法回归分析_偏最小二乘回归(PLSR)- 2 标准算法(NIPALS)
1 NIPALS 算法 Step1:对原始数据X和Y进行中心化,得到X0和Y0.从Y0中选择一列作为u1,一般选择方差最大的那一列. 注:这是为了后面计算方便,如计算协方差时,对于标准化后的数据,其样 ...
最新文章
- 分布式为什么一定要有高可用的分布式锁?一线大厂必看!
- 10分钟精通SharePoint - SharePoint升级
- 线索二叉树(c/c++)
- ModifyStyle函数的用法
- python 就业需求分析_python的就业前景如何?
- 监听以太网(三) Packet32数据结构说明
- 你可以保持沉默,但你所说的一切都将成为呈堂证供——浅谈Azure WORM保护
- python如何在文本内排序_在python中对文本文件中的项进行排序
- matlab 中使用 GPU 加速运算
- android ExpandableListView
- 【渝粤教育】国家开放大学2018年春季 0076-22T工商行政管理法 参考试题
- 利用java网络通信技术实现一个迷你QQ
- ODAC安装配置与使用详解
- 基于matlab的脑瘤mr图像处理_基于电势能改进的区域生长脑肿瘤图像分割
- 计算机wap怎么制作表格,如何在电脑上制作简单的表格?
- CH552-HID 键盘 鼠标
- 前端面试题集锦——JavaScript
- C语言经典分油问题,分油问题C语言
- 推荐六款必备好用的画图工具
- Scala中拆分操作partition、grouped、groupBy和sliding函数
热门文章
- Chromium OS并行运行Linux chroot运行Linux
- 【Struts】ActionForm
- Local-DPP论文阅读笔记
- torch.distributed多卡/多GPU/分布式DPP(二)—torch.distributed.all_reduce(reduce_mean)barrier控制进程执行顺序seed随机种子
- TFTPD32不能传输数据的解决与尝试
- 前端,自定义印章效果
- 形态学空间格局分析(MSPA)—ArcGIS结合Guidos软件
- Auto病毒,落雪病毒,威金病毒,U盘病毒,魔波病毒,arp病毒,QQ病毒,熊猫烧香病毒,rose病毒清除方法
- dreamweaver php网站模板,用DreamWeaver模板工具批量制作网页
- HttpClient4 基本操作