本文建立偏最小二乘法(PLS)回归(PLSR)模型,以及预测性能评估。
为了建立一个可靠的模型,我们还实现了一些常用的离群点检测和变量选择方法,可以去除潜在的离群点和只使用所选变量的子集来 “清洗 “你的数据。
步骤
- 建立PLS回归模型
- PLS的K-折交叉验证
- PLS的蒙特卡洛交叉验证(MCCV)。
- PLS的双重交叉验证(DCV)
- 使用蒙特卡洛抽样方法进行离群点检测
- 使用CARS方法进行变量选择。
- 使用移动窗口PLS(MWPLS)进行变量选择。
- 使用蒙特卡洛无信息变量消除法(MCUVE)进行变量选择
- 进行变量选择
可下载资源
建立PLS回归模型
这个例子说明了如何使用基准近红外数据建立PLS模型。
一、指代不同
1、偏最小二乘法:够在自变量存在严重多重相关性的条件下进行回归建模;允许在样本点个数少于变量个数的条件下进行回归建模。
2、最小二乘法:通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。
二、特点不同
1、偏最小二乘法:在计算方差和协方差时,求和号前面的系数有两种取法:当样本点集合是随机抽取得到时,应该取1/(n-1);如果不是随机抽取的,这个系数可取1/n。
2、最小二乘法:可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。
三、用法不同
1、偏最小二乘法:在自变量的简单相关系数矩阵中,有某些自变量的相关系数值较大。回归系数的代数符号与专业知识或一般经验相反;或者,它同该自变量与y的简单相关系数符号相反。对重要自变量的回归系数进行t检验,其结果不显著。
2、最小二乘法:如果预测的变量是连续的,我们称其为回归。回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。
1 2 3 |
plot(X'); % 显示光谱数据。 xlabel('波长指数'); ylabel('强度'); |

参数设定
1 2 3 |
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折交叉验证
1 2 3 |
clear; A=6; % LV的数量 K=5; % 交叉验证的次数 |

1 2 3 |
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 3 4 5 6 7 |
% 参数设置 A=6; method='center'; N=500; % Monte Carlo抽样的数量 % 运行mccv. plot(MCCV.RMSECV); % 绘制每个潜在变量(LVs)数量下的RMSECV值 xlabel('潜在变量(LVs)数量'); |
随时关注您喜欢的主题

1 |
MCCV |

MCCV是一个结构性数据。结果解释。
Ypred:预测值
Ytrue:真实值
RMSECV:交叉验证的均方根误差,越小越好。
Q2:与R2含义相同,但由交叉验证计算得出。
PLS的双重交叉验证(DCV)
说明如何对PLS建模进行DCV。与K-fold CV一样,DCV是交叉验证的一种方式。
1 2 3 4 5 |
% 参数设置 N=50; % Monte Carlo抽样的数量 dcv(X,y,A,k,method,N); DCV |

使用蒙特卡洛抽样方法的离群点检测
说明离群点检测方法的使用情况
1 2 3 |
A=6; method='center'; F=mc(X,y,A,method,N,ratio); |


结果解释。
predError:每个抽样中的样本预测误差
MEAN:每个样本的平均预测误差
STD:每个样本的预测误差的标准偏差
注:MEAN值高或SD值高的样本更可能是离群值,应考虑在建模前将其剔除。
1 |
plot(F) % 诊断图 |

使用CARS方法进行变量选择。
1 2 3 |
A=6; fold=5; car(X,y,A,fold); |

结果解释。
optLV:最佳模型的LV数量
vsel:选定的变量(X中的列)。
1 |
plotcars(CARS); % 诊断图 |

注:在这幅图中,顶部和中间的面板显示了选择变量的数量和RMSECV如何随着迭代而变化。底部面板描述了每个变量的回归系数(每条线对应一个变量)如何随着迭代而变化。星形垂直线表示具有最低RMSECV的最佳模型。
使用移动窗口PLS(MWPLS)进行变量选择
1 2 3 4 5 |
load corn_m51; % 示例数据 width=15; % 窗口大小 mw(X,y,width); plot(WP,RMSEF); xlabel('窗口位置'); |

注:从该图中建议将RMSEF值较低的区域纳入PLS模型中。
使用蒙特卡洛无信息变量消除法(MCUVE)进行变量选择
1 2 3 4 |
N=500; method='center'; UVE |

1 |
plot(abs(UVE.RI)) |

结果解释。RI:UVE的可靠性指数,是对变量重要性的测量,越高越好。
进行变量选择
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
A=6; N=10000; method='center'; FROG=rd_pls(X,y,A,method,N); N: 10000 Q: 2 model: \[10000x700 double\] minutes: 0.6683 method: 'center' Vrank: \[1x700 double\] Vtop10: \[505 405 506 400 408 233 235 249 248 515\] probability: \[1x700 double\] nVar: \[1x10000 double\] RMSEP: \[1x10000 double\] |

1 2 |
xlabel('变量序号'); ylabel('选择概率'); |

结果解释:
模型结果是一个矩阵,储存了每一个相互关系中的选择变量。
概率:每个变量被包含在最终模型中的概率。越大越好。这是一个衡量变量重要性的有用指标。