【数学建模学习】偏最小二乘回归PLSR原理和板子

解决问题方向:对于n个自变量,m个因变量的建模问题。

原理:首先在自变量集中提出第一主成分u1(PCA,x1…xn的线性组合),同时在因变量中集中提出第一主成分v1,并要求u1,v1的相关程度达到最大。然后建立有y1…ym对u1的回归,如果回归方程已达到满意的精度则算法终止,否则继续第二主成分的提取,直到能达到满意的精度为止。
若最终对自变量提取了r个成分,u1…ur,PLSR将通过建立y1…ym与u1…ur的回归式,然后再表示成y1…ym与原自变量的回归方程式,即最小二乘回归方程式。

板子以及说明:(问题背景详情见司守奎的《数学建模算法与应用》对应章节)
matlab代码:

clc,clear
ab0 = load('pz.txt');
mu = mean(ab0);%均值
sig = std(ab0);% 标准差
rr = corrcoef(ab0) %相关系数矩阵
ab = zscore(ab0); %数据标准化
a = ab(:,[1:3]); %标准化的X
b = ab(:,[4:end]); %标准化的Y
% pls命令需要标准化变量
[XL,YL,XS,YS,BETA,PCTVAR,MSE,stats] = plsregress(a,b)
contr = cumsum(PCTVAR,2) %每行累计求和,即计算累计贡献率
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,2);% n是自变量个数
m = size(b,2);
%求原始数据回归方程常数项
beta3(1,:) = mu(n+1:end) - mu(1:n)./sig(1:n)*BETA2([2:end],:).*sig(n+1:end);
%求原始数据x1,x2...xn的系数,每一列是一个回归方程
beta3([2:n+1],:) = (1./sig(1:n))'*sig(n+1:end).*BETA2([2:end],:)
bar(BETA2','k') %画直方图
yhat=repmat(beta3(1,:),[size(a,1),1])+ab0(:,[1:n])*beta3([2:end],:) %求y1,y2...ym的预测值
ymax=max([yhat;ab0(:,[n+1:end])]); %求预测值和观测值的最大值
%下面画y1,y2,y3的预测图,并画直线y=x
figure, subplot(2,2,1)
plot(yhat(:,1),ab0(:,n+1),'*',[0:ymax(1)],[0:ymax(1)],'Color','k')
%legend('单杠成绩预测图',2)
subplot(2,2,2)
plot(yhat(:,2),ab0(:,n+2),'O',[0:ymax(2)],[0:ymax(2)],'Color','k')
%legend('弯曲成绩预测图',2)
subplot(2,2,3)
plot(yhat(:,3),ab0(:,n+3),'H',[0:ymax(3)],[0:ymax(3)],'Color','k')
%legend('跳高成绩预测图',2)
%如果预测图上,所有点都能在图的对角线附近均匀分布,则方程的拟合值与原值差异很小哦这个方程的拟合效果就是令人满意的,否则主成分个数再+1

pz.txt文本说明:前3列为自变量,后3列为因变量;一行为一个样本

 191 36 50 5 162 60  
 189 37 52 2 110 60
 193 38 58 12 101 101 
 162 35 62 12 105 37 
 189 35 46 13 155 58 
 182 36 56 4 101 42 
 211 38 56 8 101 38 
 167 34 60 6 125 40 
 176 31 74 15 200 40 
 154 33 56 17 251 250 
 169 34 50 17 120 38 
 166 33 52 13 210 115 
 154 34 64 14 215 105 
 247 46 50 1 50 50 
 193 36 46 6 70 31 
 202 37 62 12 210 120 
 176 37 54 4 60 25 
 157 32 52 11 230 80 
 156 33 54 15 225 73 
 138 33 68 2 110 43
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值