偏最小二乘法(PLS)

2021-08-06 15:23:14 浏览数 (1)

PLS是交叉分解的第二个重要算法族,在python等语言中也有相应的包实现。一般如果需要在研究多个自变量与因变量的关系话题中,绕不过去的就是多元回归,包括以线性关系为主的多元线性回归和高次多项式为主的响应面分析,众所周知,在多元线性回归中一般可以用最小二乘法计算每个自变量的系数,这一理论比较成熟,其系数矩阵

W

可直接由公式

(X^T X)^{-1} X^T Y

求出,但是可用看出这个公式涉及到求逆矩阵,假设X有p个因素指标,若这p个因素中的两个及以上存在线性相关(即共线),那么X的秩一定小于p,根据矩阵秩乘法的不等式

R(AB) <= min(R(A),R(B))

,故这里的

R(X^T X)

一定小于p,所以肯定是奇异的,没有逆矩阵的。然而往往这种场景在现实生活中存在的比较多,所以为了解决这个问题,引入了偏最小二乘法PLS,它又叫第二代回归分析方法,较为强大,综合了前文所述的典型相关分析、主成分分析、和多元回归分析的相关内容,是多元回归预测的理想方法。

PLS特别擅长处理当变量维度存在多重共线性、而数据样本量又比特征维度少的情况

约定

因变量为p个,分别是

Y={y_1,y_2,...,y_p}

,自变量m个,分别是

X={x_1,x_2,...,x_m}

,且都已经被标准化,以消除量纲的影响,且有

F_0 = begin{bmatrix} y_{11} & ... & y_{1p}\ ...& ... & ... \ y_{n1} & ... & y_{np} end{bmatrix}
E_0 = begin{bmatrix} x_{11} & ... & y_{1m}\ ...& ... & ... \ x_{n1} & ... & y_{nm} end{bmatrix}

思想

和上篇文章所述的典型相关分析中的思想极为相像,也是在自变量集和因变量集中提取第一主成分

t_1

,

u_1

(这里的

t_1

x_1,x_2,...,x_m

的线性组合,

u_1

y_1,y_2,...,y_p

的线性组合),使得

t_1

,

u_1

的相关程度达到最大,且可以分别代表各自变量组的最多的信息(相关程度最大是希望提取出来的

t_1

,

u_1

回归后具有强解释性),然后建立因变量

y_1,y_2,...,y_p

t_1

的回归,如果此时的回归精度已经达到预设的值则终止算法,如果没达到,则继续提取第二主成分然后一直进行下去,最终会建立一个

y_1,y_2,...,y_p

t_1,t_2,...,t_r

的回归式子,然后再反向将

t_1,t_2,...,t_r

回代入自变量组

x_1,x_2,...,x_m

,从而就建立起

y_1,y_2,...,y_p

x_1,x_2,...,x_m

的回归表达式

步骤

  • 提取两个变量组的第一对主成分
t_1

,

u_1

由上面所述,假设

t_1 = w_{11}x_1 ... w_{1m}x_m = E_0 w_1
u_1 = v_{11}y_1 ... v_{1m}y_p = F_0 v_1

则转化成如下最优化式子

max Cov(w_1^T X,v_1^T Y)
s.t. begin{cases} w_1^T w_1 = 1 \ v_1^T v_1 = 1 end{cases}

等式约束是因为标准化后自相关系数为1的原因

根据前文典型相关分析的推导,这里就是求解矩阵

E_0^T F_0 F_0^T E_0

的特征值和特征向量,其中特征值最大的

lambda^2

即对应的最大值,该特征值对应的两个特征向量即为

w_1

,而且

v_1

可由公式

v_1 = frac{F_0^T E_0 w_1}{lambda}

计算出来

具体推导过程详看前一篇典型相关分析文章,核心是利用拉格朗日乘数法

  • 建立因变量
y_1,y_2,...,y_p

及自变量

x_1,x_2,...,x_m

t_1

的回归

begin{cases} E_0 = t_1 alpha_1^T E_1 \ F_0 = t_1 beta_1^T F_1 end{cases}

这里的

E_1

,

F_1

为回归的残差矩阵,

alpha_1

beta_1

为多对一回归模型的系数向量

由最小二乘算法公式

begin{cases} alpha_1^T = (t_1^T t_1)^{-1} t_1^T E_0 \ beta_1^T = (t_1^T t_1)^{-1} t_1^T F_0 end{cases}

观察这个式子,两边同时转置后会更简洁,即

begin{cases} alpha_1 = frac{E_0^Tt_1}{||t_1||^2} \ beta_1 = frac{F_0^Tt_1}{||t_1||^2} end{cases}

如果这里的残差阵

E_1

F_1

不满足精度要求(即矩阵中的元素的绝对值近似在某个阈值下,一般情况近似为0则表示满足需要),则需要继续提取主成分,这里就有别于典型相关分析了,典型相关分析是再找第二对主成分使得和第一对相互独立,而这里就变成了利用残差阵

E_1

F_1

代替原始数据矩阵

E_0

F_0

继续提取第一主成分

  • 用残差阵
E_1

F_1

代替

E_0

F_0

重复以上步骤

这时得到的系数向量为

begin{cases} alpha_2 = frac{E_1^Tt_2}{||t_2||^2} \ beta_2 = frac{F_1^Tt_2}{||t_2||^2} end{cases}

且此时的原始

E_0

F_0

可以表示成

begin{cases} E_0 = t_1 alpha_1^T t_2 alpha_2^T E_2 \ F_0 = t_1 beta_1^T t_2 beta_2^T F_2 end{cases}

进行精度判断,不满足则一直进行下去,假设原始自变量集

E_0

的秩为r,则一定最多只能循环至r次,即

begin{cases} E_0 = t_1 alpha_1^T t_2 alpha_2^T ... t_r alpha_r^T E_r \ F_0 = t_1 beta_1^T t_2 beta_2^T ... t_r beta_r^T F_r end{cases}

相当于由r个线性无关向量线性表出而已,而这r个

t_k

如果线性无关,则是迭代最大的次数r,而实际是

t_k

往往会存在相关性,所以说循环最多是r次,且此时的残差阵

E_r

F_r

一定是满足精度条件

而根据自变量集

x_1,x_2,...,x_m

t_k

的回归,则一定可以知道

t_k = w_{k1}^* x_1 ... w_{km}^* x_m

这个系数

w_k^*(w_{k1}^*,...,w_{km}^*)

满足

t_k^* = prod_{j=1}^{k-1} (1 - w_jalpha_j^T) w_k

,这个可以根据归纳法得出

这个时候就可以将

t_k

代入进第二个式子,且

beta_k = frac{F_{k-1}^Tt_k}{||t_k||^2}

为已知的系数,所以此时得到

y_j = a_{j1}x_1 ... a_{jm}x_m

为最终所求的式子

说明

一般情况下,如果求r个成分会显得冗余,这里可以类比主成分分析,只需载荷值大于某个阈值即可,即只取前l个主成分,而这个超参数l需要确定,可以用交叉有效性检验来确定

交叉有效性检验

  • 思想

和交叉验证思想有所相似,但具体操作不一样,每次舍去第i个数据样本,对余下的n-1个样本用偏最小二乘算法建模并抽取h个成分得到回归式子,将舍去的第i个样本代入回归方程式,得到第i个预测值(预测值多维,因为因变量有多个,是因变量组),表示为

hat{y}_{(i)j} (h)

,然后对所有的n个样本进行循环测试,并计算第j个因变量的误差平方和,即

PRESS_j(h) = sum_{i=1}^n(y_{ij} - hat{y}_{(i)j} (h))^2

所以总的因变量组的预测误差平方和为

PRESS(h) = sum_{j=1}^pPRESS_j(h)

此外,对于所有样本点(即不抛出第i个了),计算

y_j

的误差平方和为

SS_j(h) = sum_{i=1}^n(y_{ij} - hat{y}_{ij} (h))^2

即总的因变量组的预测误差此时变成

SS(h) = sum_{j=1}^pSS_j(h)

当PRESS(h) 达到最小值时,对应的 h 即为所求的成分个数。通常,总有PRESS(h)大于SS(h),而SS(h)则小于SS(h −1)。因此,在提取成分时,总希望比 值PRESS(h)/SS(h −1)越小越好;一般可设定限制值为 0.05,所以如果此时的比值小于阈值,则只需要循环至h就行,即提取到第h个主成分即可

总结

总的来说,偏最小二乘法就是建立

y_j = a_{j1}x_1 ... a_{jm}x_m

这样的回归表达式,它的核心思想就是典型相关分析求最值时的转换和多元回归的表达式,这样一来可以用主成分代替原始变量来参与回归,它可以有效预测在自变量因变量存在强相关关系时候的因变量值,也可以综合分析出哪些变量对因变量影响最大(权值系数),是克服典型相关分析不能直接关系量化的一种回归手段,在工业、医疗等领域应用的非常广泛

0 人点赞