主要内容

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

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

加载数据

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

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

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

两分量数据拟合

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

X = nir;Y =辛烷;[n,p] = size(X);[Xloadings,Yloadings,Xscores, scores,betaPLS10,PLSPctVar] = plsreturn (...X, y, 10);

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

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

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

在实际操作中,在选择组件的数量时应该更加谨慎。例如,交叉验证是一种广泛使用的方法,本例稍后将对其进行说明。目前,上面的图表明,具有两个分量的PLSR解释了观察到的大部分方差y.计算双组分模型的拟合响应值。

[xloads, yloads,Xscores, scores,betaPLS] = plsreturn (X,y,2);yfitPLS = [ones(n,1) X]* betappls;

接下来,拟合带有两个主成分的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 (“拟合响应”);传奇({“2组件PLSR”“双组分PCR”},...“位置”“西北”);

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象分别代表了2组分PLSR和2组分PCR。

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

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

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

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

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

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

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

图中包含一个轴对象。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”聚合酶链反应的},“位置”“本身”);

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象代表PLSR, PCR。

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

装配更多部件

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

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”“十组分PCR”},...“位置”“西北”);

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象分别代表10个组分的PLSR和10个组分的PCR。

两个模型都适用y相当准确,尽管PLSR的拟合还是稍微准确一些。然而,对于任何一个模型来说,10个成分仍然是一个任意选择的数字。

选择交叉验证的组件数量

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

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

plsregress可以选择通过交叉验证来估计均方预测误差(MSEP),在这种情况下使用10倍C-V。

[Xl,Yl,Xs,Ys,beta,pctVar,PLSmsep] = plsregression (X,y,10,“简历”10);

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

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

PLSR的MSEP曲线表明,两个或三个组件的作用尽可能好。另一方面,PCR需要四个组分才能获得相同的预测精度。

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

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象代表PLSR, PCR。

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

模型吝啬

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

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

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

图中包含一个轴对象。axis对象包含3个line类型的对象。这些对象分别代表第一分量、第二分量、第三分量。

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

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

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

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

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

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

对于本例中使用的数据,PLSR和PCR用于准确预测所需的成分数量的差异并不大,而且PLS权重和PCA负载似乎挑选出相同的变量。其他数据可能并非如此。

另请参阅

|

相关的话题