目录

 

💥1 概述

📚2 运行结果

🎉3 参考文献

👨💻4 Matlab代码


💥1 概述

在实际问题中,经常遇到需要研究两组多重相关变量间的相互依赖关系,并研究用一组变量(常称为自变量或预测变量)去预测另一组变量(常称为因变量或响应变量),除了最小二乘准则下的经典多元线性回归分析(MLR),提取自变量组主成分的主成分回归分析(PCR)等方法外,还有近年发展起来的偏最小二乘(PLS)回归方法。 

偏最小二乘回归提供一种多对多线性回归建模的方法,特别当两组变量的个数很多,且都存在多重相关性,而观测数据的数量(样本量)又较少时,用偏最小二乘回归建立的模型具有传统的经典回归分析等方法所没有的优点。 

偏最小二乘回归分析在建模过程中集中了主成分分析,典型相关分析和线性回归分析方法的特点,因此在分析结果中,除了可以提供一个更为合理的回归模型外,还可以同时完成一些类似于主成分分析和典型相关分析的研究内容,提供更丰富、深入的一些信息。 

本文介绍偏最小二乘回归分析的建模方法;通过例子从预测角度对所建立的回归模型进行比较。

📚2 运行结果

python 实现偏最小二乘回归 偏最小二乘回归matlab代码_python 实现偏最小二乘回归

 

python 实现偏最小二乘回归 偏最小二乘回归matlab代码_matlab_02

 

python 实现偏最小二乘回归 偏最小二乘回归matlab代码_matlab_03

 

python 实现偏最小二乘回归 偏最小二乘回归matlab代码_matlab_04

 

python 实现偏最小二乘回归 偏最小二乘回归matlab代码_matlab_05

 

python 实现偏最小二乘回归 偏最小二乘回归matlab代码_matlab_06

 

python 实现偏最小二乘回归 偏最小二乘回归matlab代码_偏最小二乘_07

🎉3 参考文献

[1]陆洪涛. 偏最小二乘回归数学模型及其算法研究[D].华北电力大学,2014.

👨💻4 Matlab代码

主函数部分代码:

clc;
 clear;
 %% 数据导入
load('RAW.mat');
 RAW1=RAW(:,:);
 RAW=RAW1(:,1:254);
 LLL=RAW1(:,255);
 [oo, pp]=size(RAW);
 temp = randperm(oo);
 data_train = RAW(temp(1:300),:);
 target_out = LLL(temp(1:300),:);
 data_predict = RAW(temp(301:end),:);
 predict_out = LLL(temp(301:end),:);
%% 数据处理
 var=[data_train,target_out];
 mu=mean(var);  %求均值
 sig=std(var);  %求标准差
 rr=corrcoef(var);   %求相关系数矩阵
 ab=zscore(var); %数据标准化
 a=ab(:,[1:254]);b=ab(:,end);  %提出标准化后的自变量和因变量数据
 [XL,YL,XS,YS,BETA,PCTVAR,MSE,stats] =plsregress(a,b);
 xw=a\XS;  %求自变量提出成分系数
 yw=b\YS;  %求因变量提出成分的系数
 a_0=PCTVAR(1,:);b_0=PCTVAR(2,:);%PCTVAR是一个两行的矩阵,第一行为自变量提取成分的贡献率,第二行为因变量提取成分的贡献率
 a_1=cumsum(a_0);b_1=cumsum(b_0);
%% 判断提出成分对的个数
 i=1;
 while ((a_1(i)<0.95)&&(a_0(i)>0.05)&&(b_1(i)<0.95)&&(b_0(i)>0.05))
     i=i+1;
 end
 ncomp=i;
 fprintf('主成分个数为:%d\n',ncomp);
 fprintf('%d对成分分别为:\n',ncomp);
 for i=1:ncomp
     fprintf('第%d对成分:\n',i);
     fprintf('u%d=',i);
     for k=1:254  %此处为变量x的个数
         fprintf('+(%f*x_%d)',xw(k,i),k);
     end
     fprintf('\n');
         fprintf('v%d=',i);
     for k=1  %此处为变量y的个数,假如因变量是3个的话就要写成1:3
         fprintf('+(%f*y_%d)',yw(k,i),k);
     end
     fprintf('\n');
 end