主要内容

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

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

加载数据

加载一个数据集,该数据集包括401个波长下60个汽油样品的光谱强度及其辛烷值。这些数据在Kalivas,John H.,“近红外光谱的两组数据集”,化学计量学和智能实验室系统,v.37(1997)第255-259页中进行了描述。

加载光谱近红外光谱辛烷
名称大小字节类属性NIR 60x401 192480双辛烷值60x1 480双辛烷值
[假,h] =排序(辛烷值);OldOrder = Get(GCF,“DefaultAxesColorOrder”);设置(GCF,“DefaultAxesColorOrder”,喷射(60));Plot3(Repmat(1:401,60,1)',Repmat(辛烷(H),1,401)',NIR(H,:)');设置(GCF,“DefaultAxesColorOrder”,老大号标);Xlabel(“波长指数”); 伊拉贝尔(“辛烷”); 轴心(“紧”);网格

用两个分量拟合数据

使用plsregress用十个PLS组件和一个响应拟合PLSR模型的功能。

X=近红外;y=辛烷值[n、 p]=尺寸(X)[Xloadings、Yloadings、Xscores、Yscores、betaPLS10、PLSPctVar]=plsregress(...X, y, 10);

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

情节(1:10,cumsum (100 * PLSPctVar (2:)),'-bo'); xlabel(“PLS组件数量”); 伊拉贝尔('以Y解释的百分比差异');

在实践中,在选择组件数量时可能需要更多的护理。例如,交叉验证是一个广泛使用的方法,该方法将在此示例稍后举例说明。目前,上面的剧情表明,具有两个组件的PLSR解释了观察到的大部分方差Y.计算双组分模型的拟合响应值。

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

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

[PCALoadings, PCAScores PCAVar] = pca (X,“经济”,错误的);betapcr =回归(Y-yan(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(观察到的响应的); 伊拉贝尔('合适的反应'); 传奇({'PLSR有2个组件'“2组分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 = sum((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:10100*cumsum(PLSPctVar(1,:),“这”1:10,...100 * cumsum(Pcavar(1:10))/总和(PCAVAR(1:10)),'r- ^'); xlabel('主成分数量'); 伊拉贝尔(“以X解释的方差百分比”); 传奇({“PLSR”聚合酶链反应的},'地点',“SE”);

PCR曲线均匀地提高的事实表明,为什么PCR与两个部件的PCR相对于PLSR在配件方面具有这种糟糕的工作Y. PCR构建了最佳解释的成分X,结果,前两个组件忽略了数据中对拟合观测值很重要的信息Y.

配合更多组件

随着PCR中添加更多的组分,它必然会更好地拟合原始数据Y,仅仅因为在某些时候大多数重要的预测信息X将存在于主要成分中。例如,下图表明,当使用10个组件时,这两种方法的残差差异远得多,而不是两个组件。

yfitPLS10=[一(n,1)X]*betaPLS10;betaPCR10=回归(y-均值(y),PCAScores(:,1:10));betaPCR10=PCALoadings(:,1:10)*betaPCR10;betaPCR10=[平均值(y)-平均值(X)*betaPCR10;βAPCR10];yfitPCR10=[one(n,1)X]*betaPCR10;地块(y,yfitPLS10,“波”y yfitPCR10“r ^”); xlabel(观察到的响应的); 伊拉贝尔('合适的反应'); 传奇({“具有10个组件的PLSR”“含有10种成分的PCR”},...'地点',“西北”);

两种模型适合Y相当准确,尽管PLSR仍然使拟合更加精确。然而,对于这两种模型,十个组件仍然是任意选择的数字。

通过交叉验证选择组件的数量

选择组件数量以在预测预测器变量的未来观察的响应时最小化预期误差通常有用。只需使用大量组件将在拟合当前观察到的数据时进行良好的工作,而是导致过度装备的策略。拟合当前数据的良好导致模型不呈现给其他数据,并给出了对预期误差的过度乐观估计。

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

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

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

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

pcrmsep = sum(crossval(@ pcrsse,x,y,'kfold',10),1)/ n;

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

情节(0:10,PLSMSEP(2,:),“这”,0:10,pcrmsep,'r- ^'); xlabel(“组件”); 伊拉贝尔(“估计均方预测误差”); 传奇({“PLSR”聚合酶链反应的},'地点',“不”);

事实上,PCR的第二个组成部分增加模型的预测误差,暗示该组件中包含的预测变量的组合与之强烈相关Y.同样,这是因为PCR构造成分来解释变化XY.

模型分析

因此,如果PCR需要四个组件与三个组件一起获得与PLSR相同的预测精度,则PLSR模型更加解析吗?这取决于您考虑的模型的哪个方面。

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

[Xl, Yl, X, y,β,pctVar, mse,统计]= plsregress (X, y, 3);情节(1:401,统计数据。W,'-'); xlabel(“变量”); 伊拉贝尔(“请称重”); 传奇({'1st组件'“第二部分”“第三部分”},...'地点',“西北”);

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

绘图(1:401,PCALoadings(:,1:4),'-'); xlabel(“变量”); 伊拉贝尔('pca loading'); 传奇({'1st组件'“第二部分”“第三部分”...“第四组件”},'地点',“西北”);

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

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

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

对于本示例中使用的数据,PLSR和PCR用于精确预测的PLS的数量的差异不是很大,并且PLS权重和PCA负载似乎拾取相同的变量。对于其他数据来说可能不是真的。