主要内容

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

此示例显示了如何应用部分最小二乘回归(PLSR)和主成分回归(PCR),并探讨这两种方法的有效性。PLSR和PCR在有大量预测变量时模拟响应变量的方法,并且这些预测器是高度相关的甚至共线的。这两种方法都构造了新的预测变量,称为组件,作为原始预测器变量的线性组合,但它们以不同方式构造这些组件。PCR创建组件以解释预测变量中观察到的可变性,而不考虑响应变量。另一方面,PLSR确实考虑了响应变量,因此通常会导致能够使用较少组件拟合响应变量的模型。在其实际使用方面,最终转化为更加令人报价的模型,取决于上下文。

加载数据

负载数据集,其包括在401个波长的60个汽油样品的光谱强度,以及它们的辛烷值等级。这些数据描述于Kalivas,John H.,“近红外光谱,”化学计量学和智能实验室系统,V.37(1997)PP.255-259。

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

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

用两个分量拟合数据

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

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

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

情节(1:10,cumsum (100 * PLSPctVar (2:)),“博”);Xlabel(“PLS组件数量”);ylabel('y'中解释的百分比变异);

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

在实践中,在选择组件的数量时应该更加谨慎。例如,交叉验证是一种广泛使用的方法,本例稍后将对此进行说明。目前,以上图表明,具有两个分量的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 ^”);Xlabel(观察到的响应的);ylabel(“拟合响应”);传奇({“带有两个组件的PLSR”“2组分PCR”},......“位置”“西北”);

图中包含一个轴对象。轴对象包含两个类型为line的对象。这些对象代表PLSR,具有2个组分,PCR具有2个组件。

从某种意义上说,上述情节的比较是不公平的——组件的数量(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);

图中包含一个轴对象。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 - ^);Xlabel(“主成分数目”);ylabel(“以X解释的方差百分比”);传奇({“PLSR”聚合酶链反应的},“位置”'se');

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

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

配合更多组件

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

Yfitpls10 = [of(n,1)x] * betapls10;betapcr10 =回归(Y-yan(y),pcascores(:,1:10));betapcr10 = pcaloadings(:,1:10)* betapcr10;betapcr10 = [均值(y) - 平均值(x)* betapcr10;betapcr10];YFITPCR10 = [(n,1)x] * betapcr10;绘图(Y,Yfitpls10,“波”y yfitPCR10“r ^”);Xlabel(观察到的响应的);ylabel(“拟合响应”);传奇({'PLSR有10个组件''PCR有10个组件'},......“位置”“西北”);

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

两种模型适合y相当准确,虽然PLSR仍然略微准确。但是,10个组件仍然是一个模型的任意选择的编号。

选择具有交叉验证的组件数量

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

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

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

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

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

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

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

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

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

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

模型吝啬

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

PLS权重是定义PLS组件的原始变量的线性组合,即,它们描述了PLSR中的每个组件强的强度取决于原始变量,以及在何时方向上。

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

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

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

绘图(1:401,PCaloadings(:,1:4),' - ');Xlabel(“变量”);ylabel(“PCA加载”);传奇({“组件1日”“第二部分”'第三组件'......“第四组件”},“位置”“西北”);

图中包含一个轴对象。轴对象包含4个类型为line的对象。这些对象代表第一组件,第二组件,第三组件,第四组件。

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

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

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

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

另请参阅

|

相关的话题