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

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

加载数据

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

加载光谱近红外光谱辛烷
名称大小字节类属性NIR 60x401 192480双辛烷60x1 480双
[虚设,H] =排序(辛烷);oldorder = GET(GCF,“DefaultAxesColorOrder”);集(gcf,“DefaultAxesColorOrder”,jet (60));plot3 (repmat(1:401, 60岁,1)”,repmat(辛烷(h), 1401),近红外光谱(h:) ');集(gcf,“DefaultAxesColorOrder”,oldorder);包含(“波长指数”);ylabel (“辛烷”);轴(“紧”);格

用两个部分拟合数据

使用plsregress功能,以适应十个PLS组件和一个响应PLSR模型。

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

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

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

在实践中,更多的照顾很可能是在选择组件的数量为宜。交叉验证,例如,是将在本实施例中稍后示出的广泛使用的方法。现在,上面的曲线图表明,具有两个组件PLSR解释了大部分的方差的在所观察到的y。计算用于双组分模型拟合响应值。

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

接下来,拟合一个包含两个主成分的PCR模型。第一步是进行主成分分析X,使用PCA功能,和保持两个主成分。PCR是然后在这两个部件响应变量的只是线性回归。它通常是有意义的标准偏差第一标准化每个变量当变量具有非常不同量的变化,然而,这不是在这里完成。

[PCALoadings, PCAScores PCAVar] = pca (X,“经济”,假);betaPCR =回归(Y-平均值(y)时,PCAScores(:,1:2));

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

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

拟合的PLSR和PCR结果与观察到的结果比较。

情节(y, yfitPLS,“波”y yfitPCR“r ^”);包含(观察到的响应的);ylabel (“合身。响应”);传奇({“PLSR含有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 =总和((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))/ SUM(PCAVar(1:10)),'R- ^');包含(“主成分的数量”);ylabel ("用X解释的百分比方差");传奇({“PLSR”聚合酶链反应的},'位置',“本身”);

该PCR曲线是一致的事实表明,较高的PCR为什么有两个组件这样做的不好,相对于PLSR,在拟合y。PCR构建了最佳解释的成分X,因此,前两个部分忽略了数据中的信息,而这些信息对拟合观测数据很重要y

装配更多组件

随着PCR中加入更多的成分,它必然会更好地拟合原始数据y,仅仅是因为在某些时候最重要的预测信息X将存在于主成分。例如,下图显示了使用10个部件比它的两个组成部分时残差这两种方法的区别是更富有戏剧性。

yfitPLS10 = [ones(n,1) X]*betaPLS10;betaPCR10 =回归(y-mean(y), pcascore (:,1:10));betaPCR10 = PCALoadings (: 1:10) * betaPCR10;= [mean(y) - mean(X)*betaPCR10;betaPCR10];yfitPCR10 = [ones(n,1) X]*betaPCR10;情节(y, yfitPLS10,“波”y yfitPCR10“r ^”);包含(观察到的响应的);ylabel (“合身。响应”);传奇({“有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,crossval结合一个简单的函数来计算聚合酶链反应的平方误差和,可以估计MSEP,再次使用10倍交叉验证。

PCRmsep =总和(crossval(@ pcrsse,X,Y,'KFold',10),1)/ N;

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

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

事实上,PCR中的第二种成分增加该模型的预测误差,这表明包含在该部件预测变量的组合并不强烈相关y。再次,这是因为PCR构建组件来解释变化X,而不是y

简约型

所以,如果PCR需要四个组成部分,以获得相同的预测精度PLSR由三个部分组成,是PLSR模型更简洁?这取决于你认为该模型的哪个方面。

偏最小二乘加权是定义偏最小二乘分量的原始变量的线性组合,即偏最小二乘加权。,they describe how strongly each component in the PLSR depends on the original variables, and in what direction.

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

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

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

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

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

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

对于在该例子中使用的数据,在由PLSR和PCR进行准确预测所需的部件的数量的差别不是很大,并且PLS重量和PCA负荷似乎挑选出相同的变量。这可能不是其他的数据真实。