天天看點

MATLAB中的偏最小二乘回歸(PLSR)和主成分回歸(PCR)

通過Matlab示例來解釋偏最小二乘的原理

此示例顯示如何在matlab中應用偏最小二乘回歸(PLSR)和主成分回歸(PCR),并讨論這兩種方法的有效性。

當存在大量預測變量時,PLSR和PCR都是對因變量模組化的方法,并且這些預測變量高度相關或甚至共線性。

兩種方法都将新的預測變量(稱為成分)建構為原始預測變量的線性組合,但它們以不同的方式構造這些成分。PCR建立成分來解釋預測變量中觀察到的變異性,而根本不考慮因變量。另一方面,PLSR确實将因變量考慮在内,是以通常會導緻模型能夠使用更少的成分來适應因變量。

加載資料

加載包括401個波長的60個汽油樣品的光譜強度及其辛烷值的資料集。

set(gcf,'DefaultAxesColorOrder',jet(60));
plot3(repmat(1:401,60,1)',repmat(octane(h),1,401)',NIR(h,:)');
set(gcf,'DefaultAxesColorOrder',oldorder);
xlabel('Wavelength Index'); ylabel('Octane'); axis('tight');
grid on      
MATLAB中的偏最小二乘回歸(PLSR)和主成分回歸(PCR)

使用兩個拟合資料

使PLSR模型拟合10個PLS成分和一個因變量。

為了充分拟合資料,可能需要十個成分,但可以使用此拟合的診斷來選擇具有更少成分的更簡單模型。例如,選擇成分數量的一種快速方法是将因變量中解釋的方差百分比繪制為成分數量的函數。

在實踐中,在選擇成分數量時可能需要更加謹慎。例如,交叉驗證是一種廣泛使用的方法,稍後将在本示例中進行說明。目前,上圖顯示具有兩個成分的PLSR解釋了觀察到的大部分方差y。計算雙組分模型的拟合因變量。

plot(1:10,cumsum(100*PLSPctVar(2,:)),'-bo');
xlabel('Number of PLS components');
ylabel('Percent Variance Explained in Y');      
MATLAB中的偏最小二乘回歸(PLSR)和主成分回歸(PCR)

接下來,拟合具有兩個主要成分的PCR模型。第一步是X使用該pca函數執行主成分分析,并保留兩個主成分。

然後,PCR隻是這兩個成分的因變量的線性回歸。當變量具有非常不同的可變性時,通常首先通過其标準偏差來規範每個變量。

plot(y,yfitPLS,'bo',y,yfitPCR,'r^');xlabel('Observed Response');ylabel('Fitted Response');legend({'PLSR with 2 Components' 'PCR with 2 Components'},  ... 'location','NW');
      
MATLAB中的偏最小二乘回歸(PLSR)和主成分回歸(PCR)

從某種意義上說,上圖中的比較并不合理 – 通過觀察雙組分PLSR模型預測因變量的程度來選擇成分數(兩個),并且沒有說明為什麼PCR模型應該限制相同數量的成分。然而,使用相同數量的成分,PLSR做得更好。實際上,觀察上圖中拟合值的水準分布,使用兩個分量的PCR幾乎不比使用常數模型好。回歸的r方值證明了這一點。

比較兩種模型的預測能力的另一種方法是在兩種情況下将因變量繪制成兩個預測變量。

plot3(Xscores(:,1),Xscores(:,2),y-mean(y),'bo');
legend('PLSR');
grid on; view(-30,30);      
MATLAB中的偏最小二乘回歸(PLSR)和主成分回歸(PCR)

如果不能以互動方式旋轉圖形,有點難以看到,但上面的PLSR圖顯示了緊密分散在平面上的點。另一方面,下面的PCR圖顯示點幾乎沒有線性關系。

plot3(PCAScores(:,1),PCAScores(:,2),y-mean(y),'r^');
legend('PCR');
grid on; view(-30,30);      
MATLAB中的偏最小二乘回歸(PLSR)和主成分回歸(PCR)

請注意,盡管兩個PLS成分是觀察到的更好的預測因子,但下圖顯示它們解釋的方差比例比PCR中使用的前兩個主成分少。

MATLAB中的偏最小二乘回歸(PLSR)和主成分回歸(PCR)

PCR曲線一緻性較高的事實表明,為什麼使用兩種成分的PCR相對于PLSR在拟合時表現很差。PCR建構成分以便最好地解釋X,是以,前兩個成分忽略了資料拟合中觀察到的重要資訊y。

拟合更多成分

随着在PCR中添加更多成分,它必然會更好地拟合原始資料y,這僅僅是因為在某些時候,大多數重要的預測資訊X将存在于主要成分中。例如,使用10個成分時,兩種方法的殘差遠小于兩個成分的殘差。

交叉驗證

在預測未來變量的觀察結果時,選擇成分數量以減少預期誤差通常很有用。簡單地使用大量成分将很好地拟合目前觀察到的資料,但這是一種導緻過度拟合的政策。過于拟合目前資料會導緻模型不能很好地推廣到其他資料,并對預期誤差給出過度樂觀的估計。

交叉驗證是一種統計上更加合理的方法,用于選擇PLSR或PCR中的成分數量。它通過不重複使用相同的資料來拟合模型和估計預測誤差來避免過度拟合資料。是以,預測誤差的估計不會樂觀地向下偏差。

pls可以選擇通過交叉驗證來估計均方預測誤差(MSEP),在這種情況下使用10倍CV。

[X1,Y1,Xs,Ys,β,pctVar,PLSmsep] = plsregress(X,y,10,'CV',10);      

對于PCR,crossval結合用于計算PCR的平方誤差之和,可以再次使用10倍交叉驗證來估計MSEP.

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

PLSR的MSEP曲線表明兩個或三個成分好。另一方面,PCR需要四個成分才能

獲得相同的預測精度。

MATLAB中的偏最小二乘回歸(PLSR)和主成分回歸(PCR)

事實上,PCR中的第二個成分會增加模型的預測誤差,這表明該成分中包含的預測變量的組合與其沒有很強的相關性y。再次,這是因為PCR建構成分來解釋X,而不是y。

模型簡約

是以,如果PCR需要四個成分來獲得與具有三個成分的PLSR相同的預測精度,那麼PLSR模型是否更加簡約?這取決于您考慮的模型的哪個方面。

PLS權重是定義PLS分量的原始變量的線性組合,即,它們描述了PLSR中的每個分量依賴于原始變量的權重。

MATLAB中的偏最小二乘回歸(PLSR)和主成分回歸(PCR)

類似地,PCA載荷描述了PCR中每個成分依賴于原始變量的強度。

MATLAB中的偏最小二乘回歸(PLSR)和主成分回歸(PCR)

對于PLSR或PCR,可以通過檢查每個成分最重要的變量來為每個成分提供有意義的解釋。例如,利用這些光譜資料,可以根據汽油中存在的化合物解釋強度峰值,然後觀察特定成分的權重挑選出少量這些化合物。從這個角度來看,更少的成分更易于解釋,并且由于PLSR通常需要更少的成分來充分預測因變量,是以會導緻更簡約的模型。

另一方面,PLSR和PCR都導緻每個原始預測變量的一個回歸系數加上截距。從這個意義上講,兩者都不是更簡約,因為無論使用多少成分,兩種模型都依賴于所有預測變量。更具體地,對于這些資料,兩個模型都需要401個光譜強度值以進行預測。

然而,最終目标可能是将原始變量集減少到仍然能夠準确預測因變量的較小子集。例如,可以使用PLS權重或PCA載荷來僅選擇對每個成分貢獻最大的那些變量。如前所示,來自PCR模型拟合的一些成分可主要用于描述預測變量的變化,并且可包括與因變量不強相關的變量的權重。是以,PCR會導緻保留預測不必要的變量。

對于本例中使用的資料,PLSR和PCR所需的成分數量之間的差異不是很大,PLS權重和PCA載荷選擇了相同的變量。其他資料可能并非如此。

繼續閱讀