拓端tecdat

2023-10-29

最近我们被客户要求撰写关于偏最小二乘法(PLS)回归的研究报告,包括一些图形和统计输出。

本文建立偏最小二乘法(PLS)回归(PLSR)模型,以及预测性能评估。为了建立一个可靠的模型,我们还实现了一些常用的离群点检测和变量选择方法,可以去除潜在的离群点和只使用所选变量的子集来 "清洗 "你的数据。

步骤

  • 建立PLS回归模型
  • PLS的K-折交叉验证
  • PLS的蒙特卡洛交叉验证(MCCV)。
  • PLS的双重交叉验证(DCV)
  • 使用蒙特卡洛抽样方法进行离群点检测
  • 使用CARS方法进行变量选择。
  • 使用移动窗口PLS(MWPLS)进行变量选择。
  • 使用蒙特卡洛无信息变量消除法(MCUVE)进行变量选择
  • 进行变量选择

建立PLS回归模型

这个例子说明了如何使用基准近红外数据建立PLS模型。


plot(X');               % 显示光谱数据。
xlabel('波长指数');
ylabel('强度');

参数设定


A=6;                    % 潜在变量(LV)的数量。
method='center';        % 用于建立PLS模型的X的内部预处理方法
PLS(X,y,A,method);  % 建立模型的命令

 

pls.m函数返回一个包含成分列表的对象PLS。结果解释。

regcoef_original:连接X和y的回归系数。
X_scores:X的得分。
VIP:预测中的变量重要性,评估变量重要性的一个标准。
变量的重要性。
RMSEF:拟合的均方根误差。
y_fit:y的拟合值。
R2:Y的解释变异的百分比。 

PLS的K折交叉验证

说明如何对PLS模型进行K折交叉验证

clear;
A=6;                          % LV的数量
K=5;                          % 交叉验证的次数


plot(CV.RMSECV)               % 绘制每个潜在变量(LVs)数量下的RMSECV值
xlabel('潜在变量(LVs)数量')          % 添加x标签
ylabel('RMSECV')              % 添加y标签

返回的值CV是带有成分列表的结构数据。结果解释。

RMSECV:交叉验证的均方根误差。越小越好
Q2:与R2含义相同,但由交叉验证计算得出。
optLV:达到最小RMSECV(最高Q2)的LV数量。 

蒙特卡洛交叉验证(MCCV)的PLS

说明如何对PLS建模进行MCCV。与K-fold CV一样,MCCV是另一种交叉验证的方法。

% 参数设置
A=6;
method='center';
N=500;                          % Monte Carlo抽样的数量
% 运行mccv.
plot(MCCV.RMSECV);              % 绘制每个潜在变量(LVs)数量下的RMSECV值
xlabel('潜在变量(LVs)数量');
 

MCCV

MCCV是一个结构性数据。结果解释。

Ypred:预测值
Ytrue:真实值
RMSECV:交叉验证的均方根误差,越小越好。
Q2:与R2含义相同,但由交叉验证计算得出。 

PLS的双重交叉验证(DCV)

说明如何对PLS建模进行DCV。与K-fold CV一样,DCV是交叉验证的一种方式。


% 参数设置

N=50;                                 % Monte Carlo抽样的数量
dcv(X,y,A,k,method,N);
DCV

使用蒙特卡洛抽样方法的离群点检测

说明离群点检测方法的使用情况

A=6;
method='center';
F=mc(X,y,A,method,N,ratio);

结果解释。

predError:每个抽样中的样本预测误差
MEAN:每个样本的平均预测误差
STD:每个样本的预测误差的标准偏差 

plot(F) % 诊断图

注:MEAN值高或SD值高的样本更可能是离群值,应考虑在建模前将其剔除。

使用CARS方法进行变量选择。


A=6;
fold=5;
car(X,y,A,fold);

结果解释。

optLV:最佳模型的LV数量
vsel:选定的变量(X中的列)。 

plotcars(CARS); % 诊断图

注:在这幅图中,顶部和中间的面板显示了选择变量的数量和RMSECV如何随着迭代而变化。底部面板描述了每个变量的回归系数(每条线对应一个变量)如何随着迭代而变化。星形垂直线表示具有最低RMSECV的最佳模型。

使用移动窗口PLS(MWPLS)进行变量选择

load corn_m51;                      % 示例数据
width=15;                           % 窗口大小
mw(X,y,width);
plot(WP,RMSEF);
xlabel('窗口位置');

注:从该图中建议将RMSEF值较低的区域纳入PLS模型中。

使用蒙特卡洛无信息变量消除法(MCUVE)进行变量选择

N=500;
method='center';

UVE


plot(abs(UVE.RI))

结果解释。RI:UVE的可靠性指数,是对变量重要性的测量,越高越好。

进行变量选择

A=6;
N=10000;
method='center';
FROG=rd_pls(X,y,A,method,N);


              N: 10000
              Q: 2
          model: [10000x700 double]
        minutes: 0.6683
         method: 'center'
          Vrank: [1x700 double]
         Vtop10: [505 405 506 400 408 233 235 249 248 515]
    probability: [1x700 double]
           nVar: [1x10000 double]
          RMSEP: [1x10000 double]


xlabel('变量序号');
ylabel('选择概率'); 

结果解释:

模型结果是一个矩阵,储存了每一个相互关系中的选择变量。
概率:每个变量被包含在最终模型中的概率。越大越好。这是一个衡量变量重要性的有用指标。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

拓端tecdat 的相关文章

  • 如何将数据传递给 MATLAB oncleanup 函数?

    我有一个编译好的 matlab 程序 可以自动调整机器参数 在调整周期结束时 我需要恢复一些原始设置 有时会发生意外错误 有时用户会发现调整算法未正常工作 因此应终止 使用 control C 如果发生可预测的错误 我可以使用 try ca
  • MATLAB - 通过垂直连接子矩阵重新排列矩阵

    我在执行以下任务时遇到问题 假设一个 3x6 矩阵 A 0 2787 0 2948 0 4635 0 8388 0 0627 0 0435 0 6917 0 1185 0 3660 0 1867 0 2383 0 7577 0 6179 0
  • 如何选择面积最大的对象?

    我用过bwconvhull检测图像的某个部分 正如您在图像中看到的那样 有许多具有特定质心的对象 我想做的是检测面积最大的物体 左起第一个大物体 并忽略其他物体 我应该遵循哪种方法 我将非常感谢您的帮助 以下是代码 由于我仍在努力 所以写得
  • 使用简单矩阵乘法时出错

    我在一次简单的乘法运算中偶然发现了一个错误 这让我感到非常惊讶 我一直以为这里发生了什么 只为矩阵乘法 http www mathworks nl help matlab matlab prog operators html x 2 y z
  • matlab 中的动画绘图

    我正在尝试创建一个三角形的动画图 最终结果应该是十个三角形 后面跟着两个更大的三角形 后面跟着一条直线 使用matlab文档 https de mathworks com help matlab ref drawnow html 我最终得到
  • MATLAB 变量传递和惰性赋值

    我知道在 Matlab 中 当将新变量分配给现有变量时 会进行 惰性 评估 例如 array1 ones 1 1e8 array2 array1 的价值array1不会被复制到array2除非元素array2被修改 由此我推测Matlab中
  • Matlab:2行10列的子图

    如何在 matlab 中绘制 20 幅图像 2 行 10 列 我知道我必须使用 子图 功能 但我对给出的参数感到困惑 我尝试给予 子图 2 10 行索引 列索引 但它似乎不起作用 请帮忙 的前两个参数subplot函数分别给出图中子图的总行
  • 在矩阵中找到叉的最快方法

    定义 A i j 1 是十字的中点 如果元素A i 1 j 1A i 1 j 1A i j 1 1A i j 1 1 这些元素和中点一起形成矩阵 A 中的十字 其中 A 至少是一个 3 3 矩阵 并且i j 0 假设上图是 8 8 矩阵 A
  • 拟合具有扭曲时基的正弦波

    我想知道在 Matlab 中拟合具有扭曲时基的正弦波的最佳方法 时间失真由 n 阶多项式 n 10 给出 其形式为t distort P t 例如 考虑失真t distort 8 12t 6t 2 t 3 这只是幂级数展开 t 2 3 这将
  • 如何在Matlab中将图像从笛卡尔坐标更改为极坐标?

    我正在尝试将图像的像素从 x y 坐标转换为极坐标 但我遇到了问题 因为我想自己编写该函数 这是我到目前为止所做的代码 function newImage PolarCartRot read and show the image image
  • Blob 的簇生长

    考虑以下来自 Mathworks 的图像 我已经用标签标记了斑点 L num bwlabel I 如何迭代连接所有斑点 即从一个斑点开始 找到离它最近的一个 考虑最左边的两个斑点 可以从一个斑点的许多点绘制许多条线来连接到另一个斑点blob
  • 如何从 Matlab 运行 R 脚本 [重复]

    这个问题在这里已经有答案了 我有 m 文件 我想用它来运行 R 脚本 我怎样才能做到这一点 Matlab文件 caller m some matlab code need to call a R script some matlab cod
  • matlab中简单正弦波的傅里叶变换

    我尝试显示简单正弦波的频谱 因为我们知道具有固定频率的单个正弦波必须在其频谱中出现峰值我编写了这段代码 但我无法得到这个峰值我的代码中有什么问题 clc nsteps 200 number of signal elements in tim
  • OpenCV功能类似于matlab的“查找”

    我正在寻找 openCV 中的一个函数来帮助我制作图像蒙版 例如在 MATLAB 中 B A or B 零 大小 A B A 10 c 有些功能可以让你通过mask向他们提出论据 按照您描述的方式创建面具 我认为您正在追求Cmp 或 Cmp
  • 了解 Matlab 中的 DEL2 函数以便用 C++ 对其进行编码

    为了用 C 编写 DEL2 matlab 函数 我需要了解该算法 我已经成功地为不在边界或边缘上的矩阵元素编写了函数 我已经看过几个有关它的主题 并通过输入 edit del2 或 type del2 来阅读 MATLAB 代码 但我不明白
  • 静态时序数据的数据库解决方案

    我们拥有一个庞大且不断增长的实验数据集 该数据集取自约 30 000 名受试者 对于每个主题 都有多个数据记录 在每个记录中 收集了多个生理数据时间序列 每个时间序列约 90 秒长 并以 250Hz 采样 我应该注意到 时间序列的任何给定实
  • MATLAB:MEX 矩阵除法给出的结果与 m 文件不同

    我使用 MATLAB 的编码器工具创建了矩阵指数函数的 MEX 版本 以在另一组函数中使用 问题是 MEX 版本给出的结果与原始 m 文件不同 经过调试 我认为这是因为MEX文件和m文件没有做相同的矩阵除法 或者 MEX 文件首先就有问题
  • matlab 中的 for 或 while 循环

    我刚刚开始在编程课的 matlab 中使用 for 循环 基本的东西对我来说很好 但是我被要求 使用循环创建一个 3 x 5 矩阵 其中每个元素的值是其行号其列号除以行号和列号之和的幂 例如元素 2 3 的值为 2 3 2 3 1 6 那么
  • Matlab 的 fftn 在多线程下变得更慢?

    我可以访问 12 核机器和一些严重依赖 fftn 的 matlab 代码 我想加快我的代码速度 由于 fft 可以并行化 我认为更多的内核会有所帮助 但我看到的恰恰相反 这是一个例子 X peaks 1028 ncores feature
  • 如何在 MATLAB 中为 4 个子图创建一个通用图例?

    如何在 MATLAB 中为 4 个子图创建一个通用图例 如下所示 又快又脏 hSub subplot 3 1 1 plot 1 1 1 1 1 1 1 1 hLegend legend hello i am legend subplot 3

随机推荐

  • Jmeter录制脚本

    性能关注点 接口响应时间 50毫秒 1000毫秒 吞度量 10000万每天 tPs 每秒处理事务数 压测需求与业务操作步骤 压测对象 http news baidu com 压测页面 首页 国际频道 财经频道 步骤 访问首页 单击 国际频道
  • 测试用例的优先级

    刚接触软件测试 先熟悉一下测试用例的优先级的概念 有时会听到0级别case的说法 其实这是对具有一定优先级的测试用例的说法 在这际测试实践中 测试用例根据重要性分成一定的等级 在不通的公司 可能测试用例的等级划分有所差异 但是基本大同小异
  • 积分计算两条曲线围绕y坐标轴旋转形成的立体体积

    积分计算两条曲线围绕y坐标轴旋转形成的立体体积 和附录文章1类似 计算两条曲线y x 2和y 2x围绕y坐标轴形成的立方体体积 首先要计算积分的上限和下限 根据两者相交的点求出 0 4 外层大圆R y y 1 2 和内层小圆r y y 2的
  • 使用iptables进行入站流量过滤

    iptables是Linux内置的流量过滤工具 同时也是多种防火墙的底层实现 如fw3 在本次应用中 iptables通过丢弃不符合规则的数据包 使得未注册设备在DHCP获取ip阶段失败 无法连接到专用内网 保证系统安全 iptables使
  • 10年软件测试工程师感悟——写给还在迷茫中的朋友

    这两天和朋友谈到软件测试的发展 其实软件测试已经在不知不觉中发生了非常大的改变 前几年的软件测试行业还是一个风口 随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业 目前软件测试行业 缺口 已经基本饱和 当然 我说的是最基础的功能测试
  • QT之D指针

    什么是D指针 如果你已经看过到Qt源码 你会发现它经常使用Q D和Q Q 宏 本文介绍了这些宏的用途 该Q D和Q Q宏是一个设计模式的一部分被称为d 指针 也称为 不透明的指针 其中一个库的实现细节可以从它的用户 并转移到执行被隐藏 另外
  • LLVM每日谈之二 LLVM IR

    作者 snsn1984 在介绍LLVM IR之前 我们需要先了解下LLVM的结构 传统的静态编译器分为三个阶段 前端 优化和后端 LLVM的三阶段设计是这样的 这样做的优点是如果需要支持一种新的编程语言 那么我们只需要实现一种新的前端 如果
  • 0基础java入门:第二十五节.面向对象思想理解思路。

    0基础java入门 第二十五节 面向对象思想理解思路 本章需要时间和代码积累才能理解通透 不要着急 先来了解 敲上三年代码再回来看 面向对象是现在大部分编程语言中都会提及和使用到的一种思想方式 有人说很难理解 但个人觉得其实不难 因为面向对
  • element ui tabs 修改成hover触发点击

    Element UI tabs标签页 将点击选择改成鼠标指到就点击 类似hover 1 单个组件 在el tabs里添加个ref 删去el tab pane里的 name绑定 然后在mounted里添加代码 mounted this nex
  • f12获取网页文本_网页上的文字不能复制怎么办?有这5招轻松复制

    有时候我们需要一些辅助资料时 会经常使用搜索工具查坎相关网页文件 但遇到一些需要用到的段落却不能直接复制时 一个字一个字的敲肯定是不现实 有什么方法可以让其直接进行复制呢 方法1 打印网页 这种方式相对比较简单 而且电脑也不需要真的安装打印
  • 串行通信协议---HART协议

    实际应用中 HART协议是仅次于Modbus协议的最接近统一现场总线的标准 主要是在4 20mA电流信号上面叠加数字信号 物理层采用Bell 202标准的FSK技术成功实现模拟信号和数字信号双向同时通信而互不干扰 HART协议规定了传输的物
  • 怎么启用windwos无线网驱动

    重启windwos无线网驱动 说明 进入系统窗口 打开设备管理器 在设备管理器目录中找到网络适配器 找到 Realtek 8822BE Wireless LAN 802 11ac PCI ENIC 左键选中Realtek 8822BE Wi
  • 【QT5】tslib移植

    tslib全称应该是Touch Screen Library 也就是专门针对触摸屏创建的开源库 tslib的最新工程的github地址为 https github com libts tslib 感谢牛人的开源工程 clone下来 进入源码
  • 使用Visual Studio开发Linux程序

    首先我们使用visual studio创建项目 这里我使用的是visual studio 2022 visual studio 2019的也一样 如下创建项目即可 然后我们需要在visual studio中连接我们的Linux服务器 点击
  • 刷脸支付顺应时代各种优惠政策出现

    相比于人工合成的二维码扫码支付 刷脸支付采用的是生物信息识别技术 在安全性上后者要比前者高很多 刷脸支付自从出世以来就受到广大创业者 商家的关注 自从去年支付宝推出刷脸支付并在实体店投入运营 到今年刷脸支付得到快速的发展 微信也加入刷脸支付
  • 后台运行VirtualBox虚拟机

    运行一个VirtualBox虚拟机最常见的方式是 打开VirtualBox 点击对应的虚拟机来运行 使用这种传统方式运行的虚拟机通常都有一个前台界面 可以像操作本地电脑一样进行操作 但是Linuxer有时候更喜欢通过终端远程接入 而不是在虚
  • 手撕/手写/自己实现 BN层/batch norm/BatchNormalization python torch pytorch

    计算过程 在卷积神经网络中 BN 层输入的特征图维度是 N C H W 输出的特征图维度也是 N C H W N 代表 batch size C 代表 通道数 H 代表 特征图的高 W 代表 特征图的宽 我们需要在通道维度上做 batch
  • 51单片机上连YL69土壤湿度传感器获取的数据在LCD上显示出来

    要做一个项目 被分配到做DS18B20温度传感与YL69土壤湿度传感器在51单片机上用LCD显示屏显示出来 温度传感模块很简单 网上到处都是资料 但是YL69的资料就很少了 特别还是在51单片机上实现 其实懂了原理也还是简单 将传感器的AO
  • 高并发+海量数据下如何实现系统解耦?【上】

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 一 写在前面 之前更新过一个 亿级流量系统架构 系列 主要讲述了一个大规模商家数据平台的如下几个方面 如何承载百亿级数据存储 如何设计高容错的分布式架构 如何设计承载
  • 拓端tecdat

    最近我们被客户要求撰写关于偏最小二乘法 PLS 回归的研究报告 包括一些图形和统计输出 本文建立偏最小二乘法 PLS 回归 PLSR 模型 以及预测性能评估 为了建立一个可靠的模型 我们还实现了一些常用的离群点检测和变量选择方法 可以去除潜