长久以来,我对偏最小二乘(Partial Least Squares,PLS) 整个模型都是处于一个“知道一点概念,但是细说说不上来”的状态。因此,最近花了几天的时间研究了一下 PLS 模型,这篇也算是对最近的一些研究的总结。
引言
PLS 尝试对两个矩阵 X∈RN×p,Y∈RN×q 之间的关系进行建模。其中 N 是样本数,p 和 q 分别是 X 中的变量个数和 Y 中的变量个数。PLS 会尝试寻找 X 各列的线性组合 ξ,和 Y 的各列的线性组合 ω,使得 ξ 能够最大程度上解释 ω 中的方差(Variance)。换言之,我们期望 ξ 和 ω 之间的协方差(Covariance)最大。用一个最优化问题来表述,即为
u1,v1maxs.t.ξ1Tω1=u1TXTYv1∥u1∥=∥v1∥=1
这里 u1∈Rp 和 v1∈Rq 即为 X 和 Y 中各列的线性组合系数。因为 u1TXTYv1 的结果与 u1 和 v1 的模有关,我们不希望系数向量的模影响到协方差的计算,所以有限定条件 ∥u1∥=∥v1∥=1,即限定它们的模长均为 1。
基于拉格朗日乘子法,得到增广拉格朗日函数:
L=u1TXTYv1−21λuu1Tu1−21λvv1Tv1.
分别基于 L 对 u1 和 v1 求偏导,令之为 0 可得
∂u1∂L∂v1∂L=XTYv1−λuu1=0=YTXu1−λvv1=0.
上式第一行左乘 u1T,第二行左乘 v1T,可以得到
u1TXTYv1=λu=λv.
因此,记 λ=λu=λv=u1TXTYv1 (注意 λ 即为 ξ1 和 ω1 的协方差),上式可以化简为
XTYv1(XTY)Tu1=λu1=λv1
容易看出,u1 和 v1 分别为 XTY 对应奇异值 λ 的左奇异向量和右奇异向量。而我们期望协方差 λ 最大化,所以令 u1 和 v1 对应 XTY 的最大奇异值,即可最大化协方差。
我们往往不期望就此止步。前面我们只找到了协方差最大的一组组合 ξ1 和 ω1;那么是否还有其它组合呢?答案是肯定的,因为显然 X 和 Y 中的协方差并没有挖掘完毕。如何进一步寻找其它的组合?这就涉及了 PLS 的几种不同的变种:
- PLS-W2A
- PLS-SVD
- PLS2 和 PLS1
三种不同类型的 PLS
PLS-W2A
PLS-W2A 的思路是,ξ1,ξ2,… 之间,以及 ω1,ω2,… 之间,都需要线性无关。为了达到这一点,我们需要从 X 的列空间和 Y 的列空间中分别除去和 ξ1 和 ω1 相关的部分,然后再对剩下的部分做奇异值分解。这可以用基于最小二乘的线性回归来解决。
基于上面的思路,当我们提取第 r 组隐变量 ξr 和 ωr 时,
X(r)Y(r)=X(r−1)−ξr−1γr−1T=Y(r−1)−ωr−1δr−1T,
注意, X(1)=X,Y(1)=Y,且
γrδr=ξrTξξrTX=ωrTωrωrTY,
这里面 γr 和 δr 分别是用 ξr 回归 X 的线性回归系数和用 ωr 回归 Y 的线性回归系数。这样的操作又叫做一阶 deflation。
这样,Xr 的各列将垂直于 ξ1,…,ξr−1,Y(r) 也同理。基于 X(r) 和 Y(r) 采取同样的奇异值分解策略,就可以计算得到 ξr 和 ωr。
PLS-W2A 相当于在引言中的优化目标的基础上,加入了额外的约束。新的优化目标为:
ur,vrmaxs.t.ξrTωr=urT(X(r))TY(r)vr∥ur∥=∥vr∥=1ξr⊥ξlωr⊥ωl, 1≤l<r.
或者等价地,
pr,qrmaxs.t.ξrTωr=prTXTYqr∥pr∥=∥qr∥=1prTXTXpl=0qrTYTYql=0, 1≤l<r.
注意:pr,qr 和 ur,vr 并不相同,但是具有一定的转化关系:
P=U(ΓTU)−1,
其中 P 各列正比于 pr,Γ 各列为 γr,同样地也可以得出
Q=V(ΔTV)−1.
PLS-SVD
PLS-SVD 的思路是逐步拆解 X 和 Y 的协方差矩阵 XTY。设 XTY 的奇异值分解为(不失一般性,假设 q<p)
XTY=ADBT=[α1…αp]d1⋱dqβ1T⋮βqT=r=1∑qαrdrβrT,
那么我们一共可以提取出 q 组 ξr 和 ωr(1≤r≤q):
ξrωr=Xαr=Yβr,
注意它和 PLS-W2A 的不同之处:PLS-SVD 得到的 ξ1,ξ2,… 之间,以及 ω1,ω2,… 之间,不一定是相互垂直的。
PLS2 和 PLS1
和 PLS-W2A 相比,PLS2 中,在得到 ξr 和 ur 之后,仍对 X(r) 做相同的一阶 deflation,但是 Y(r) 则根据 ξ1 来做 deflation。这是因为 PLS2 一般看作一个回归模型,我们需要逐步基于 X 中的隐变量来预测 Y,因此每步只需要计算 ξr 即可;甚至,我们不需要对 Y(r) 做 deflation,因为不管做不做 deflation,最终得到的结果都一样。
PLS1 则是 PLS2 的一种特殊情况——当 Y 只有一列时,PLS2 退化为 PLS1。
NIPALS 算法
前面介绍的 PLS-W2A、PLS2 和 PLS1 都是基于奇异值分解来计算第 r 对的隐变量的;事实上,它们也可以通过迭代的方法求得,对应的迭代法即为幂法。事实上,这也是 NIPALS 算法中用到的。