偏最小二乘回归(PLSR)和主成分回归(PCR)
原文:http://tecdat.cn/?p=2655
此示例显示如何在matlab中应用偏最小二乘回归(PLSR)和主成分回归(PCR),并讨论这两种方法的有效性。当存在大量预测变量时,PLSR和PCR都是对响应变量建模的方法,并且这些预测变量高度相关或甚至共线。两种方法都将新的预测变量(称为组件)构建为原始预测变量的线性组合,但它们以不同的方式构造这些组件。PCR创建组件来解释预测变量中观察到的变异性,而根本不考虑响应变量。另一方面,PLSR确实将响应变量考虑在内,因此通常会导致模型能够使用更少的组件来适应响应变量。
加载数据
加载包括401个波长的60个汽油样品的光谱强度及其辛烷值的数据集。
使用两个 拟合数据
使用该plsregress功能使PLSR模型适用于10个PLS组件和一个响应。
为了充分拟合数据,可能需要十个组件,但可以使用此拟合的诊断来选择具有更少组件的更简单模型。例如,选择组件数量的一种快速方法是将响应变量中解释的方差百分比绘制为组件数量的函数。
在实践中,在选择组件数量时可能需要更加谨慎。例如,交叉验证是一种广泛使用的方法,稍后将在本示例中进行说明。目前,上图显示具有两个成分的PLSR解释了观察到的大部分方差y。计算双组分模型的拟合响应值。
接下来,拟合具有两个主要组分的PCR模型。第一步是X使用该pca函数执行主成分分析,并保留两个主成分。然后,PCR只是这两个组分的响应变量的线性回归。当变量具有非常不同的可变性时,通常首先通过其标准偏差来规范化每个变量是有意义的,但是,这里没有做到。
从某种意义上说,上图中的比较并不合理 - 通过观察双组分PLSR模型预测响应的程度来选择组分数(两个),并且没有理由为什么PCR模型应该限制在相同数量的组件。然而,使用相同数量的组件,PLSR在安装方面做得更好y。实际上,观察上图中拟合值的水平散射,使用两个分量的PCR几乎不比使用常数模型好。两次回归的r平方值证实了这一点。
比较两种模型的预测能力的另一种方法是在两种情况下将响应变量绘制成两个预测变量。
如果不能以交互方式旋转图形,有点难以看到,但上面的PLSR图显示了一个紧密分散在平面上的点。另一方面,下面的PCR图显示了点云,几乎没有线性关系的指示。
请注意,尽管两个PLS组分是观察到的更好的预测因子y,但下图显示它们解释了观察到的差异X比PCR中使用的前两个主要组分少。
PCR曲线一致性较高的事实表明,为什么使用两种成分的PCR相对于PLSR在拟合时表现如此糟糕y。PCR构建组件以便最好地解释X,因此,前两个组件忽略了数据中适合观察到的重要信息y。
适合更多组件
随着在PCR中添加更多组件,它必然会更好地拟合原始数据y,这仅仅是因为在某些时候,大多数重要的预测信息X将存在于主要组件中。例如,下图显示,使用10个组件时,两种方法的残差差异远小于两个组件的残差差异。
交叉验证
在预测未来对预测变量的观察结果时,选择组件数量以减少预期误差通常很有用。简单地使用大量组件将很好地拟合当前观察到的数据,但这是一种导致过度拟合的策略。过于拟合当前数据会导致模型不能很好地推广到其他数据,并对预期误差给出过度乐观的估计。
交叉验证是一种更加统计上合理的方法,用于选择PLSR或PCR中的组分数量。它通过不重复使用相同的数据来适应模型和估计预测误差来避免过度拟合数据。因此,预测误差的估计不会乐观地向下偏差。
plsregress 可以选择通过交叉验证来估计均方预测误差(MSEP),在这种情况下使用10倍CV。
[X1,Y1,Xs,Ys,β,pctVar,PLSmsep] = plsregress(X,y,10,'CV',10);
对于PCR,crossval结合用于计算PCR的平方误差之和的简单函数,可以再次使用10倍交叉验证来估计MSEP。
PCRmsep = sum(crossval(@ pcrsse,X,y,'KFold',10),1)/ n;
PLSR的MSEP曲线表明两个或三个组件的工作尽可能好。另一方面,PCR需要四个分量才能获得相同的预测精度。
事实上,PCR中的第二个组成部分会增加模型的预测误差,这表明该组成部分中包含的预测变量的组合与其没有很强的相关性y。再次,这是因为PCR构建组件来解释变异X,而不是y。
模型规约
因此,如果PCR需要四个组件来获得与具有三个组件的PLSR相同的预测精度,那么PLSR模型是否更加简约?这取决于您考虑的模型的哪个方面。
PLS权重是定义PLS分量的原始变量的线性组合,即,它们描述了PLSR中的每个分量依赖于原始变量以及在什么方向上的强度。
类似地,PCA加载描述了PCR中每个组分依赖于原始变量的强度。
对于PLSR或PCR,可以通过检查每个组件最重要的变量来为每个组件提供物理上有意义的解释。例如,利用这些光谱数据,可以根据汽油中存在的化合物解释强度峰值,然后观察特定组分的重量挑选出少量这些化合物。从这个角度来看,更少的组件更易于解释,并且由于PLSR通常需要更少的组件来充分预测响应,因此会导致更简约的模型。
另一方面,PLSR和PCR都导致每个原始预测变量的一个回归系数加上截距。从这个意义上讲,两者都不是更简约,因为无论使用多少组件,两种模型都依赖于所有预测变量。更具体地,对于这些数据,两个模型都需要401个光谱强度值以进行预测。
然而,最终目标可能是将原始变量集减少到仍然能够准确预测响应的较小子集。例如,可以使用PLS权重或PCA加载来仅选择对每个组件贡献最大的那些变量。如前所示,来自PCR模型拟合的一些组件可主要用于描述预测变量的变化,并且可包括与响应不强相关的变量的大权重。因此,PCR可以导致保留预测不必要的变量。
对于本例中使用的数据,PLSR和PCR所需的组件数量之间的差异不是很大,PLS权重和PCA负载似乎选择了相同的变量。其他数据可能并非如此。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- WordPress插件File-Manager任意文件上传复现
- CVE-2020-15778:OpenSSH命令注入漏洞复现
- TokyoWesterns CTF 6th 2020 部分WP
- 极客巅峰2020 部分WriteUp
- norecon:一款自动化recon工具
- Bashtop:一款功能强大的LinuxOSXFreeBSD资源监控工具
- iOS 推送手机消息背后的技术
- 手把手教你使用 cert-manager 签发免费证书
- flink源码分析之TaskManager启动篇
- 【面试说】一年半前端 Bigo 一二三 面
- 【前端进阶】深入浅出浏览器事件循环【内附练习题】
- 【面试说】一年半前端 Shopee 面经
- 【前端进阶】深入浅出 JavaScript 中的 this
- 手把手带你玩转 AWS Lambda
- Guava 中的 Stopwatch 是个什么鬼?