主要内容

偏最小二乘回归与主成分回归

本实例说明了如何应用偏最小二乘回归(PLSR)和主成分回归(PCR),并探讨了这两种方法的有效性。PLSR和PCR都是在预测变量大量且预测变量高度相关甚至共线的情况下,对反应变量进行建模的方法。这两种方法构造新的预测变量,称为分量,是原始预测变量的线性组合,但它们以不同的方式构造这些分量。聚合酶链反应(PCR)创造了解释预测变量中观察到的可变性的成分,而完全不考虑反应变量。另一方面,PLSR确实考虑了响应变量,因此经常导致模型能够用更少的组件来拟合响应变量。就其实际用途而言,这最终是否会转化为一种更节俭的模型取决于环境。

加载数据

加载包含60个401波长的汽油样品的光谱强度的数据集,以及它们的辛烷值额定值。这些数据在Kalivas, John H.的“近红外光谱的两个数据集”,化学计量学和智能实验室系统,第37页中有描述(1997) pp.255 - 259。

负载光谱近红外光谱辛烷
名称大小字节类属性NIR 60x401 192480 double辛烷60x1 480 double
(假,h) =(辛烷);oldorder =得到(gcf,“DefaultAxesColorOrder”);集(gcf,“DefaultAxesColorOrder”, jet (60));plot3 (repmat(1:401, 60岁,1)”,repmat(辛烷(h), 1401),近红外光谱(h:) ');集(gcf,“DefaultAxesColorOrder”, oldorder);包含(“波长指数”);ylabel (“辛烷”);轴(“紧”);网格

图中包含一个axes对象。axis对象包含60个line类型的对象。

用两分量拟合数据

使用plsregress函数拟合具有十个PLS分量和一个响应的PLSR模型。

X =近红外光谱;y =辛烷;(氮、磷)= (X)大小;[Xloadings, Yloadings Xscores、Yscores betaPLS10, PLSPctVar] = plsregress (...X, y, 10);

10个组件可能比充分拟合数据所需的要多,但从这种拟合得出的诊断可用于选择一个组件较少的更简单的模型。例如,选择分量数量的一种快速方法是绘制响应变量中解释的方差百分比作为分量数量的函数。

情节(1:10,cumsum (100 * PLSPctVar (2:)),“博”);包含(“PLS组件数量”);ylabel (“用Y解释的百分比方差”);

图中包含一个axes对象。axis对象包含一个类型为line的对象。

实际上,在选择组成部分的数量时可能更谨慎一些是可取的。例如,交叉验证是一种广泛使用的方法,稍后将在本示例中说明它。目前,上面的图表明,PLSR的两个组成部分解释了观察到的大部分差异y.计算双组分模型的拟合响应值。

[Xloadings, Yloadings Xscores、Yscores betaPLS] = plsregress (X, y, 2);yfitPLS = [ones(n,1) X]* betaps;

接下来,拟合具有两个主成分的PCR模型。第一步是进行主成分分析X,使用主成分分析功能,并保留两个主要组成部分。PCR只是反应变量在这两个组分上的线性回归。当变量具有非常不同的可变性时,首先通过其标准偏差规范化每个变量通常是有意义的,然而,这里没有这样做。

[PCALoadings, PCAScores PCAVar] = pca (X,“经济”、假);betaPCR = return (y-mean(y), PCAScores(:,1:2));

为了使PCR结果更容易解释的原始光谱数据,转换为回归系数的原始,无中心变量。

betaPCR = PCALoadings (: 1:2) * betaPCR;betaPCR =[均值(y) -均值(X)*betaPCR;betaPCR];yfitPCR = [ones(n,1) X]*betaPCR;

图拟合与PLSR和PCR拟合的观察反应比较。

情节(y, yfitPLS,“波”y yfitPCR“r ^”);包含(观察到的响应的);ylabel (“拟合响应”);传奇({“两个组件的PLSR”“两组分聚合酶链反应”},...“位置”“西北”);

图中包含一个axes对象。坐标轴对象包含两个line类型的对象。这些对象代表两个组分的PLSR,两个组分的PCR。

从某种意义上说,上图中的比较是不公平的——组分的数量(两个)是通过观察双组分PLSR模型预测反应的效果来选择的,没有理由将PCR模型限制在同样数量的组分上。然而,在相同数量的组件下,PLSR在拟合方面做得更好y.事实上,从上图中拟合值的水平散点来看,双组分PCR并不比常数模型好多少。两个回归的r平方值证实了这一点。

TSS =总和(y-mean (y)) ^ 2);RSS_PLS = ((y-yfitPLS) ^ 2)总和;rsquaredPLS = 1 - RSS_PLS/TSS
rsquaredPLS = 0.9466
RSS_PCR = ((y-yfitPCR) ^ 2)总和;rsquaredPCR = 1 - RSS_PCR/TSS
rsquaredPCR = 0.1962

比较两种模型预测能力的另一种方法是在两种情况下绘制响应变量与两种预测因子的关系图。

plot3 (Xscores (: 1) Xscores (:, 2), y-mean (y),“波”);传奇(“PLSR”);网格;视图(-30年,30);

图中包含一个axes对象。axis对象包含一个类型为line的对象。该节点表示PLSR。

如果不能交互旋转图形,这有点难以看到,但上面的PLSR图显示了紧密分散在一个平面上的点。另一方面,下面的PCR图显示了大量的点,几乎没有显示出线性关系。

plot3 (PCAScores (: 1) PCAScores (:, 2), y-mean (y),“r ^”);传奇(聚合酶链反应的);网格;视图(-30年,30);

图中包含一个axes对象。axis对象包含一个类型为line的对象。该对象表示PCR。

注意,虽然两个PLS分量是观察到的更好的预测器y,下面的图显示,它们解释了观察到的较小的方差X比PCR中使用的前两个主成分要多。

情节(1:10,100 * cumsum (PLSPctVar (1:)),“这”1:10,...100 * cumsum (PCAVar(1:10)) /笔(PCAVar (1:10)),的r - ^);包含(“主成分数”);ylabel (“用X解释的百分比方差”);传奇({“PLSR”聚合酶链反应的},“位置”“本身”);

图中包含一个axes对象。坐标轴对象包含两个line类型的对象。这些对象代表PLSR, PCR。

PCR曲线一致较高的事实说明了为什么有两个组分的PCR在拟合方面比PLSR做得这么差y.PCR构建了最好的解释成分X结果,前两个分量忽略了数据中对拟合观测结果很重要的信息y

安装更多组件

随着PCR中加入更多的成分,它必然会更好地拟合原始数据y,因为在某一时刻,大多数重要的预测信息X会出现在主成分中。例如,下图显示,当使用十个组分时,两种方法的残差差异要比使用两个组分时小得多。

yfitPLS10 = [ones(n,1) X]*betaPLS10;betaPCR10 = return (y-mean(y), PCAScores(:,1:10));betaPCR10 = PCALoadings (: 1:10) * betaPCR10;betaPCR10 =[均值(y) -均值(X)*betaPCR10;betaPCR10];yfitPCR10 = [ones(n,1) X]*betaPCR10;情节(y, yfitPLS10,“波”y yfitPCR10“r ^”);包含(观察到的响应的);ylabel (“拟合响应”);传奇({“10个部件的PLSR”“10组分聚合酶链反应”},...“位置”“西北”);

图中包含一个axes对象。坐标轴对象包含两个line类型的对象。这些对象代表10个组分的PLSR和10个组分的PCR。

两种模型适合y相当准确,尽管PLSR仍然能稍微更准确地贴合。然而,对于任何一个模型来说,十个分量仍然是任意选择的数字。

交叉验证的组件数量选择

在从预测变量的未来观测结果中预测响应时,选择分量的数量以使预期误差最小化通常是有用的。简单地使用大量的组件可以很好地拟合当前观察到的数据,但这种策略会导致过拟合。对当前数据拟合得太好会导致模型不能很好地推广到其他数据,并对预期误差给出了过于乐观的估计。

交叉验证是选择PLSR或PCR中成分数量的一种统计上更合理的方法。它不重用相同的数据来拟合模型和估计预测误差,从而避免数据过拟合。因此,预测误差的估计不乐观地向下偏倚。

plsregress可以选择通过交叉验证估计均方预测误差(MSEP),在本例中使用10倍C-V。

[Xl, Yl, X, y,β,pctVar, PLSmsep] = plsregress (X, y,,“简历”10);

PCR,crossval结合简单的计算PCR误差平方和的函数,可以估计MSEP,再次使用10倍交叉验证。

PCRmsep = (crossval (@pcrsse, X, y,和“KFold”10), 1) / n;

PLSR的MSEP曲线表明,两个或三个组件的效果差不多。另一方面,PCR需要四个组分才能获得相同的预测精度。

:情节(0:10 PLSmsep (2),“这”0:10 PCRmsep,的r - ^);包含(“组件”);ylabel (“估计均方预测误差”);传奇({“PLSR”聚合酶链反应的},“位置”“不”);

图中包含一个axes对象。坐标轴对象包含两个line类型的对象。这些对象代表PLSR, PCR。

事实上,是PCR的第二部分增加模型的预测误差,表明该成分中所包含的预测变量的组合与y.这是因为PCR构建了解释变异的成分X,而不是y

模型吝啬

那么,如果PCR需要4个组分才能获得与PLSR有3个组分的预测精度相同的预测精度,那么PLSR模型是否更简约呢?这取决于您考虑的模型的哪个方面。

PLS权重是定义PLS分量的原始变量的线性组合,即,它们描述PLSR中的每个分量对原始变量的依赖程度,以及依赖的方向。

[Xl, Yl, X, y,β,pctVar, mse,统计]= plsregress (X, y, 3);情节(1:401,统计数据。W,“- - -”);包含(“变量”);ylabel (“请重”);传奇({“组件1日”“第二部分”“第三部分”},...“位置”“西北”);

图中包含一个axes对象。坐标轴对象包含3个line类型的对象。这些对象代表第1分量,第2分量,第3分量。

类似地,PCA负载描述了PCR中每个成分对原始变量的依赖程度。

情节(1:401 PCALoadings (:, 1:4),“- - -”);包含(“变量”);ylabel (“PCA加载”);传奇({“组件1日”“第二部分”“第三部分”...“第四组件”},“位置”“西北”);

图中包含一个axes对象。axis对象包含4个line类型的对象。这些对象代表第1分量,第2分量,第3分量,第4分量。

无论是PLSR还是PCR,通过检测其权重最大的变量,每个成分都可能给出一个有物理意义的解释。例如,有了这些光谱数据,就有可能解释汽油中存在的化合物的强度峰值,然后观察某一特定成分的权重,从中挑选出少量这些化合物。从这个角度来看,更少的组件更容易解释,因为PLSR通常需要更少的组件来充分预测响应,它导致了更简约的模型。

另一方面,PLSR和PCR对每个原始预测变量都有一个回归系数,加上一个截距。从这个意义上说,这两种模型都不吝啬,因为无论使用了多少组件,这两种模型都依赖于所有的预测器。更具体地说,对于这些数据,两个模型都需要401个光谱强度值才能进行预测。

然而,最终的目标可能是将原始的变量集减少到更小的子集,仍然能够准确地预测响应。例如,可以使用PLS权重或PCA负载只选择对每个组件贡献最大的变量。如前所述,PCR模型拟合的一些成分可能主要用于描述预测变量的变化,并可能包括与响应不强烈相关的变量的大权重。因此,PCR可以导致保留预测中不必要的变量。

对于本例中使用的数据,PLSR和PCR精确预测所需的成分数量差异并不大,PLS权重和PCA负载似乎选择了相同的变量。这对其他数据来说可能不是真的。

另请参阅

|

相关的话题

Baidu
map