本实例展示了如何应用偏最小二乘回归(partial least squares regression, PLSR)和主成分回归(principal components regression, PCR),并探讨了这两种方法的有效性。PLSR和PCR都是在有大量预测变量时建模响应变量的方法,这些预测变量高度相关甚至共线。这两种方法都构建新的预测变量,称为分量,作为原始预测变量的线性组合,但它们构建这些分量的方式不同。PCR创造了解释预测变量中观察到的变异性的成分,而完全不考虑响应变量。另一方面,PLSR确实考虑了响应变量,因此往往导致模型能够用更少的组件来拟合响应变量。就其实际应用而言,这最终是否会转化为一种更节俭的模式,取决于环境。
加载一个数据集,包括401波长的60个汽油样品的光谱强度和它们的辛烷值。这些数据描述在Kalivas, John H.,“近红外光谱的两个数据集,”化学计量学和智能实验室系统,第37节(1997) pp.255 - 259。
负载光谱谁迪尔辛烷
名称大小字节类属性NIR 60x401 192480 double octane 60x1 480 double
(假,h) =(辛烷);oldorder =得到(gcf,'defaultaxescolororord');集(gcf,'defaultaxescolororord', jet (60));plot3 (repmat(1:401, 60岁,1)”,repmat(辛烷(h), 1401),近红外光谱(h:) ');集(gcf,'defaultaxescolororord', oldorder);包含(“波长指数”);ylabel (“辛烷”);轴(“紧”);网格在
使用plsregress
函数拟合一个PLSR模型与十个PLS分量和一个响应。
X =近红外光谱;y =辛烷;(氮、磷)= (X)大小;[Xloadings, Yloadings Xscores、Yscores betaPLS10, PLSPctVar] = plsregress (...X, y, 10);
10个组件可能比充分拟合数据所需要的要多,但是从这个拟合得出的诊断结果可以用来选择一个更简单、组件更少的模型。例如,选择组件数量的一个快速方法是将响应变量中解释的方差百分比作为组件数量的函数绘制出来。
情节(1:10,cumsum (100 * PLSPctVar (2:)),“博”);包含(“PLS组件数量”);ylabel (“以Y解释的方差百分比”);
在实践中,在选择组件的数量时应该更加谨慎。例如,交叉验证是一种广泛使用的方法,本例稍后将对此进行说明。目前,以上图表明,具有两个分量的PLSR解释了观测到的大部分方差y
.计算两分量模型的拟合响应值。
[Xloadings, Yloadings Xscores、Yscores betaPLS] = plsregress (X, y, 2);yfitPLS = [ones(n,1) X]*betaPLS;
接下来,用两个主要成分拟合PCR模型。第一步是执行主成分分析X
,使用主成分分析
功能,并保留两个主要组成部分。PCR只是对这两个成分的反应变量的线性回归。当变量具有非常不同的可变性时,首先通过其标准差对每个变量进行标准化通常是有意义的,然而,这里没有这样做。
[PCALoadings, PCAScores PCAVar] = pca (X,“经济”、假);betaPCR =回归(y-mean(y), PCAScores(:,1:2));
为了使PCR结果更容易根据原始光谱数据解释,将原始的无中心变量转换为回归系数。
betaPCR = PCALoadings (: 1:2) * betaPCR;betaPCR = [mean(y) - mean(X)*betaPCR;betaPCR];yfitPCR = [ones(n,1) X]*betaPCR;
与PLSR和PCR相匹配的反应与观察结果相匹配。
情节(y, yfitPLS,“波”y yfitPCR'r ^');包含(观察到的响应的);ylabel (“拟合响应”);传奇({“带有两个组件的PLSR”“2组分PCR”},...“位置”,'NW');
从某种意义上说,上述情节的比较是不公平的——组件的数量(2)选择通过观察一个双组分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);
如果不能交互旋转图形,就很难看到,但上面的PLSR图显示了在一个平面上紧密分散的点。另一方面,下面的PCR图显示了大量的点,几乎没有线性关系的迹象。
plot3 (PCAScores (: 1) PCAScores (:, 2), y-mean (y),'r ^');传奇(聚合酶链反应的);网格在;视图(-30年,30);
请注意,虽然两个PLS成分是观测到的更好的预测y
,下面的图显示,它们解释了一些较少的方差在观察X
比PCR中使用的前两个主要成分要多。
情节(1:10,100 * cumsum (PLSPctVar (1:)),“这”1:10,...100 * cumsum (PCAVar(1:10)) /笔(PCAVar (1:10)),的r - ^);包含(“主成分数目”);ylabel ('x'中解释的百分比方差);传奇({“PLSR”聚合酶链反应的},“位置”,“本身”);
PCR曲线一致较高的事实表明,与PLSR相比,两种组分的PCR在拟合方面做得如此之差y
.PCR构建的成分可以最好地解释X
,因此,前两个组件忽略了在适合观察到的数据中的数据中的信息y
.
随着PCR中加入更多的组分,必然会更好的拟合原始数据y
,因为在某些时候,大多数重要的预测信息X
将出现在主要组件中。例如,下图显示,当使用10个组分时,两种方法的残差比使用两个组分时要小得多。
yfitPLS10 = [ones(n,1) X]*betaPLS10;betaPCR10 =回归(y-mean(y), PCAScores(:,1:10));betaPCR10 = PCALoadings (: 1:10) * betaPCR10;betaPCR10 = [mean(y) - mean(X)*betaPCR10;betaPCR10];yfitPCR10 = [ones(n,1) X]*betaPCR10;情节(y, yfitPLS10,“波”y yfitPCR10'r ^');包含(观察到的响应的);ylabel (“拟合响应”);传奇({“带有10个组件的PLSR”“10种成分的PCR”},...“位置”,'NW');
两种模型适合y
相当准确,尽管PLSR仍然使一个稍微更准确的匹配。然而,对于任何一种模型,10个组件仍然是任意选择的数字。
当从未来对预测变量的观察预测响应时,选择组件的数量以最小化预期误差通常是有用的。简单地使用大量的组件可以很好地拟合当前观测数据,但这是一种导致过拟合的策略。太好地拟合当前数据会导致模型不能很好地推广到其他数据,并给出了对预期误差的过于乐观的估计。
交叉验证是选择PLSR或PCR中组分数量的一种更可靠的统计方法。它通过不重复使用相同的数据来拟合模型和估计预测误差来避免过拟合数据。因此,预测误差的估计并不是乐观地向下偏倚。
plsregress
可以选择通过交叉验证估计均方预测误差(MSEP),在本例中使用10倍C-V。
[xl,yl,xs,ys,beta,pctvar,plsmsep] = plsregress(x,y,10,“简历”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”聚合酶链反应的},“位置”,“不”);
事实上,PCR中的第二个组分增加模型的预测误差,表明组合预测变量所包含的成分不强相关y
.这是因为PCR构建了解释变异的成分X
,而不是y
.
那么,如果PCR需要四种组分才能获得与PLSR三种组分相同的预测精度,那么PLSR模型是否更精简?这取决于您考虑模型的哪个方面。
PLS权重是定义PLS分量的原始变量的线性组合,也就是说,它们描述了PLSR中的每个分量对原始变量的依赖程度以及依赖方向。
[xl,yl,xs,ys,beta,pctvar,mse,stats] = plsregress(x,y,3);情节(1:401,统计信息,“- - -”);包含(“变量”);ylabel (“请重”);传奇({“组件1日”“第二部分”“第三部分”},...“位置”,'NW');
类似地,PCA负荷描述了PCR中的每个成分对原始变量的依赖程度。
情节(1:401 PCALoadings (:, 1:4),“- - -”);包含(“变量”);ylabel (“PCA加载”);传奇({“组件1日”“第二部分”“第三部分”...“第四组件”},“位置”,'NW');
无论是PLSR还是PCR,每个组分都可以通过检测其权重最大的变量得到物理意义上的解释。例如,有了这些光谱数据,就有可能根据汽油中存在的化合物来解释强度峰值,然后观察某一特定成分的重量,从中挑选出一小部分化合物。从这个角度来看,更少的组成部分更容易解释,而且由于PLSR通常需要更少的组成部分来充分预测响应,它导致了更精简的模型。
另一方面,PLSR和PCR对每个原始预测变量都有一个回归系数,加上一个截距。从这个意义上说,这两个模型都不是更简洁的,因为无论使用多少组件,这两个模型都依赖于所有预测器。更具体地说,对于这些数据,两个模型都需要401个光谱强度值来进行预测。
然而,最终的目标可能是将原始的变量集减少到一个更小的子集,仍然能够准确地预测响应。例如,可以使用PLS权重或PCA负载来选择对每个组件贡献最大的变量。如前所述,PCR模型拟合的一些成分可能主要用于描述预测变量的变化,并可能包括与响应不强相关的变量的较大权重。因此,PCR会导致保留不必要的预测变量。
对于本例中使用的数据,PLSR和PCR精确预测所需的成分数量的差异并不大,PLS权重和PCA负荷似乎选择了相同的变量。对其他数据来说可能不是这样。