本文建立偏最小二乘法(PLS)回歸(PLSR)模型,以及預測性能評估。為了建立一個可靠的模型,我們還實作了一些常用的離群點檢測和變量選擇方法,可以去除潛在的離群點和隻使用所選變量的子集來 "清洗 "你的資料。
步驟
- 建立PLS回歸模型
- PLS的K-折交叉驗證
- PLS的蒙特卡洛交叉驗證(MCCV)。
- PLS的雙重交叉驗證(DCV)
- 使用蒙特卡洛抽樣方法進行離群點檢測
- 使用CARS方法進行變量選擇。
- 使用移動視窗PLS(MWPLS)進行變量選擇。
- 使用蒙特卡洛無資訊變量消除法(MCUVE)進行變量選擇
- 進行變量選擇
建立PLS回歸模型
這個例子說明了如何使用基準近紅外資料建立PLS模型。
- plot(X'); % 顯示光譜資料。
- xlabel('波長指數');
- ylabel('強度');
參數設定
- A=6; % 潛在變量(LV)的數量。
- method='center'; % 用于建立PLS模型的X的内部預處理方法
- PLS(X,y,A,method); % 建立模型的指令
pls.m函數傳回一個包含成分清單的對象PLS。結果解釋。
regcoef_original:連接配接X和y的回歸系數。
X_scores:X的得分。
VIP:預測中的變量重要性,評估變量重要性的一個标準。
變量的重要性。
RMSEF:拟合的均方根誤差。
y_fit:y的拟合值。
R2:Y的解釋變異的百分比。
PLS的K折交叉驗證
說明如何對PLS模型進行K折交叉驗證
- clear;
- A=6; % LV的數量
- K=5; % 交叉驗證的次數
- plot(CV.RMSECV) % 繪制每個潛在變量(LVs)數量下的RMSECV值
- xlabel('潛在變量(LVs)數量') % 添加x标簽
- ylabel('RMSECV') % 添加y标簽
傳回的值CV是帶有成分清單的結構資料。結果解釋。
RMSECV:交叉驗證的均方根誤差。越小越好
Q2:與R2含義相同,但由交叉驗證計算得出。
optLV:達到最小RMSECV(最高Q2)的LV數量。
蒙特卡洛交叉驗證(MCCV)的PLS
說明如何對PLS模組化進行MCCV。與K-fold CV一樣,MCCV是另一種交叉驗證的方法。
1. % 參數設定
2. A=6;
3. method='center';
4. N=500; % Monte Carlo抽樣的數量
5. % 運作mccv.
6. plot(MCCV.RMSECV); % 繪制每個潛在變量(LVs)數量下的RMSECV值
7. xlabel('潛在變量(LVs)數量');
MCCV
MCCV是一個結構性資料。結果解釋。
Ypred:預測值
Ytrue:真實值
RMSECV:交叉驗證的均方根誤差,越小越好。
Q2:與R2含義相同,但由交叉驗證計算得出。
PLS的雙重交叉驗證(DCV)
說明如何對PLS模組化進行DCV。與K-fold CV一樣,DCV是交叉驗證的一種方式。
1.
2. % 參數設定
3.
4. N=50; % Monte Carlo抽樣的數量
5. dcv(X,y,A,k,method,N);
6. DCV
使用蒙特卡洛抽樣方法的離群點檢測
說明離群點檢測方法的使用情況
- A=6;
- method='center';
- F=mc(X,y,A,method,N,ratio);
結果解釋。
predError:每個抽樣中的樣本預測誤差
MEAN:每個樣本的平均預測誤差
STD:每個樣本的預測誤差的标準偏差
plot(F) % 診斷圖
注:MEAN值高或SD值高的樣本更可能是離群值,應考慮在模組化前将其剔除。
使用CARS方法進行變量選擇。
- A=6;
- fold=5;
- car(X,y,A,fold);
結果解釋。
optLV:最佳模型的LV數量
vsel:標明的變量(X中的列)。
plotcars(CARS); % 診斷圖
注:在這幅圖中,頂部和中間的面闆顯示了選擇變量的數量和RMSECV如何随着疊代而變化。底部面闆描述了每個變量的回歸系數(每條線對應一個變量)如何随着疊代而變化。星形垂直線表示具有最低RMSECV的最佳模型。
使用移動視窗PLS(MWPLS)進行變量選擇
- load corn_m51; % 示例資料
- width=15; % 視窗大小
- mw(X,y,width);
- plot(WP,RMSEF);
- xlabel('視窗位置');
注:從該圖中建議将RMSEF值較低的區域納入PLS模型中。
使用蒙特卡洛無資訊變量消除法(MCUVE)進行變量選擇
- N=500;
- method='center';
- UVE
- plot(abs(UVE.RI))
結果解釋。RI:UVE的可靠性指數,是對變量重要性的測量,越高越好。
進行變量選擇
1. A=6;
2. N=10000;
3. method='center';
4. FROG=rd_pls(X,y,A,method,N);
5.
6.
7. N: 10000
8. Q: 2
9. model: [10000x700 double]
10. minutes: 0.6683
11. method: 'center'
12. Vrank: [1x700 double]
13. Vtop10: [505 405 506 400 408 233 235 249 248 515]
14. probability: [1x700 double]
15. nVar: [1x10000 double]
16. RMSEP: [1x10000 double]
17.
- xlabel('變量序号');
- ylabel('選擇機率');
結果解釋: