功能:偏最小二乘回归分析。

  • 结果图

  • 源代码
function [sol, yhat] = PLS_Regress(x, y)
% 函数功能:偏最小二乘回归
% =============================================================
% 输入:
%   x:自变量;
%   y:因变量;
% 输出:
%   sol:回归系数,每一列是一个回归方程,且第一个元素是常数项;
%   yhat:拟合值
% 调用格式:
%{
clear;clc;
pz = load('pz3_3.txt');
x = pz(:, 1:3);
y = pz(:, 4:6);
[sol, yhat] = PLS_Regress(x, y);
subplot(3, 1, 1)
bar([yhat(:, 1), y(:, 1)]);
subplot(3, 1, 2)
bar([yhat(:, 2), y(:, 2)]);
subplot(3, 1, 3)
bar([yhat(:, 3), y(:, 3)]);
%}
% =============================================================
[rX, n] = size(x);           % 自变量个数
[rY, m] = size(y);           % 因变量个数
assert(rX == rY, 'x和y的横向维度不一致!');
%%% 标准化数据
xmean = mean(x);    % 每一列均值
xstd = std(x);           % 每一列标准差
ymean = mean(y);    % 每一列均值
ystd = std(y);           % 每一列标准差
e0 = (x - xmean(ones(rX, 1), :))./xstd(ones(rX, 1), :);
f0 = (y - ymean(ones(rY, 1), :))./ystd(ones(rY, 1), :);
%%% 迭代计算
chg = eye(n);          % w到w*变换矩阵的初始化
w = zeros(n, n);
w_star = zeros(n, n);
t = zeros(rX, n);
ss = zeros(1, n);
press_i = zeros(1, rX);
press = zeros(1, n);
Q_h2 = zeros(1, n);
for i = 1:n%%%  以下计算w,w*和t的得分向量%%% 提取最大特征值和对应的特征向量w(:, i) = Max_Eig(f0'*e0);w_star(:, i) = chg*w(:, i);                   % 计算w*的取值t(:, i) = e0*w(:, i);                               % 计算成分ti的得分alpha = e0'*t(:, i)/(t(:, i)'*t(:, i));           % 计算alpha_ichg = chg*(eye(n) - w(:, i)*alpha');      % 计算w到w*的变换矩阵e = e0 - t(:, i)*alpha';                            % 计算残差e0 = e;%%% 以下计算ss(i)的值beta = [t(:, 1:i), ones(rX, 1)]\f0;            % 求回归方程的系数beta(end, :) = [];                                      % 删除回归分析的常数项cancha = f0 - t(:, 1:i)*beta;                     % 残差ss(i) = norm(cancha)^2;                           % 误差平方和%%% 以下计算press(i)for j = 1:rXt1 = t(:, 1:i);f1 = f0;she_t = t1(j, :);              % 保存舍去的第j个样本点she_f = f1(j, :);t1(j, :) = [];                     % 删除第j个观测值f1(j, :) = [];beta1 = [t1, ones(rX - 1, 1)]\f1;        % 求回归分析的系数beta1(end, :) = [];              % 删除回归分析的常数项cancha = she_f - she_t*beta1;          % 残差press_i(j) = norm(cancha)^2;             endpress(i) = sum(press_i);if i > 1Q_h2(i) = 1 - press(i)/ss(i - 1);elseQ_h2(i) = 1;endif Q_h2(i) < 0.0975fprintf('提出的成分个数r=%d\n', i);r = i;break;end
end
beta_z = [t(:, 1:r), ones(rX, 1)]\f0;            % 求Y关于t的回归系数
beta_z(end, :) = [];                                       % 删除常数项
xishu = w_star(:, 1:r)*beta_z;     % 求Y关于标准数据X的回归系数,每一列是一个回归方程
%%% 计算原始数据的回归方程的常数项
ch0 = zeros(1, m);
for i = 1:mch0(i) = ymean(i) - xmean./xstd*ystd(i)*xishu(:, i);
end
% 计算原始数据的回归方程的系数,每一列是一个回归方程
xish = zeros(n, m);
for i = 1:mxish(:, i) = xishu(:, i)./xstd'*ystd(i);
end
sol = [ch0; xish];
yhat = [ones(size(x, 1), 1), x]*sol;
end%%% 最大特征值对应的特征向量
function Eigenvector = Max_Eig(A)
B = A'*A;
% 最大二范数的列
[~, idx] = max(sum(B));
x = A(:, idx);
% 收敛性判断
x0 = x - x;
% 迭代
Eigenvector = A'*x;
while norm(x - x0) > 1e-8Eigenvector = A'*x;              % 特征向量方向 Eigenvector = Eigenvector/norm(Eigenvector);       % 归一化    x0 = x;                   % 更新x = A*Eigenvector;
end
end
  • 数据
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

【Matlab学习手记】偏最小二乘回归相关推荐

  1. MATLAB中的偏最小二乘回归(PLSR)和主成分回归(PCR)

    通过Matlab示例来解释偏最小二乘的原理 此示例显示如何在matlab中应用偏最小二乘回归(PLSR)和主成分回归(PCR),并讨论这两种方法的有效性. 当存在大量预测变量时,PLSR和PCR都是对 ...

  2. matlab偏最小二乘截距,matlab代写偏最小二乘回归(PLSR)和主成分回归(PCR)

    原标题:matlab代写偏最小二乘回归(PLSR)和主成分回归(PCR) 原文:http://tecdat.cn/?p=2655 此示例显示如何在matlab中应用偏最小二乘回归(PLSR)和主成分回 ...

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

    解决问题方向:对于n个自变量,m个因变量的建模问题. 原理:首先在自变量集中提出第一主成分u1(PCA,x1-xn的线性组合),同时在因变量中集中提出第一主成分v1,并要求u1,v1的相关程度达到最大 ...

  4. 回归学习算法---偏最小二乘回归、PCA降维与理论

    1.相关系数的意义与原理 在研究中我们经常要研究多个变量之间的相关性,这些变量可以是自变量与自变量之间.或者是自变量与因变量之间的相关性,为了表示这种相关性,我们引入了相关系数这个概念.这里使用的是P ...

  5. plsr matlab,matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR)

    pls可以选择通过交叉验证来估计均方预测误差(MSEP),在这种情况下使用10倍CV. R 1 [X1,Y1,Xs,Ys,β,pctVar,PLSmsep]=plsregress(X,y,10,'CV ...

  6. 部分最小二乘回归分析matlab,MATLAB如何用偏最小二乘回归法做预测?跪求大神帮忙 - 程序语言 - 小木虫 - 学术 科研 互动社区...

    CODE: function question_16 %2016-12-26 clear;clc pz=xlsread('C:\Users\cirnotxm\Documents\EGDownloads ...

  7. matlab做偏最小二乘回归(PLS带精度验证)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/lusongno1/article/de ...

  8. Matlab偏最小二乘回归命令plsregress详解

    Matlab偏最小二乘回归命令plsregress Matlab工具箱中偏最小二乘回归命令plsregress的使用格式为 [XL,YL,XS,YS,BETA,PCTVAR,MSE,stats] = ...

  9. 偏最小二乘回归(PLSR)和主成分回归(PCR)

    本项目中我们被要求显示如何在matlab中应用偏最小二乘回归(PLSR)和主成分回归(PCR),并讨论这两种方法的有效性.当存在大量预测变量时,PLSR和PCR都是对因变量建模的方法,并且这些预测变量 ...

最新文章

  1. Spring AOP的一个简单实现
  2. 【PC工具】U盘SD卡测试工具,速度测试,坏块测试查找
  3. 使用easyexcel导出
  4. DHTML【5】--HTML
  5. 自已写的几个分页的存储过程
  6. Scriptis安装(基于Linkis开发的数据分析工具)
  7. 通向架构师的道路(第四天)之Tomcat性能调优-让小猫飞奔
  8. 四个你看后可能会影响你一生的故事
  9. 如何先执行input (checkbox,radio)再执行函数
  10. [CentOS7] - CentOS7设置开机启动
  11. C#基础知识1-深入理解值类型和引用类型
  12. 用DataGrip生成导出整个库数据的方法
  13. 【实践】推荐召回体系化建设与排序优化实践(附PPT下载链接)
  14. data后缀文件解码_小白学PyTorch | 17 TFrec文件的创建与读取
  15. 计算机c语言报告册,计算机c语言实验报告.docx
  16. VMware Guided Consolidation
  17. Box Cox Transformation
  18. Python学习笔记(基础知识第三篇:列表、元组、字典、集合)
  19. “打折”上市的网易云音乐一跌再跌,为何资本市场不买单?
  20. 台式计算机usb接口无反应6,如何解决电脑的USB接口没反应,教您如何解决

热门文章

  1. 时序分析(13) -- 重新审视GARCH和EWMA
  2. curl直接传参,非json,持续访问用于使用接口生成数据库表之类
  3. [PDF文件全攻略]-PDF二次开发(.NET开发 C++开发 Java PHP)
  4. 【STM32F4】六、SRAM和DRAM的区别
  5. C++入门基础01:指针与引用
  6. linux/unix 单行脚本
  7. Junit单元测试总结
  8. 通过浏览器F12开发者工具的javascript控制台给Vue表单赋值
  9. 初入大便( debian)
  10. pd读取excel表格