1.8. 交叉分解#
交叉分解模块包含用于降维和回归的**监督**估计器,属于“偏最小二乘”家族。

交叉分解算法旨在找到两个矩阵(X 和 Y)之间的基本关系。它们是用于建模这两个空间中协方差结构的潜在变量方法。它们将尝试在 X 空间中找到能够解释 Y 空间中最大多维方差方向的多维方向。换句话说,PLS 将 X
和 Y
都投影到一个低维子空间,从而使 transformed(X)
和 transformed(Y)
之间的协方差最大化。
PLS 与 主成分回归 (PCR) 有相似之处,PCR 中样本首先被投影到低维子空间,然后使用 transformed(X)
预测目标 y
。PCR 的一个问题是降维是无监督的,可能会丢失一些重要变量:PCR 会保留方差最大的特征,但方差小的特征也可能与预测目标相关。从某种意义上说,PLS 允许进行相同类型的降维,但会考虑目标 y
。以下示例对此进行了说明:* 主成分回归与偏最小二乘回归。
除了 CCA,PLS 估计器特别适用于预测变量矩阵的变量多于观测值,以及特征之间存在多重共线性(multicollinearity)的情况。相比之下,标准线性回归在这些情况下会失败,除非它经过正则化。
此模块中包含的类有 PLSRegression
、PLSCanonical
、CCA
和 PLSSVD
1.8.1. PLSCanonical#
我们在此描述 PLSCanonical
中使用的算法。其他估计器使用此算法的变体,并在下方详细说明。我们建议参考 [1] 节,了解这些算法的更多细节和比较。在 [1] 中,PLSCanonical
对应于“PLSW2A”。
给定两个中心化矩阵 \(X \in \mathbb{R}^{n \times d}\) 和 \(Y \in \mathbb{R}^{n \times t}\),以及组件数量 \(K\),PLSCanonical
算法流程如下:
设置 \(X_1\) 为 \(X\),\(Y_1\) 为 \(Y\)。然后,对于每个 \(k \in [1, K]\)
a) 计算 \(u_k \in \mathbb{R}^d\) 和 \(v_k \in \mathbb{R}^t\),它们是交叉协方差矩阵 \(C = X_k^T Y_k\) 的第一个左奇异向量和右奇异向量。\(u_k\) 和 \(v_k\) 称为权重。根据定义,选择 \(u_k\) 和 \(v_k\) 使得它们最大化投影后的 \(X_k\) 与投影目标之间的协方差,即 \(\text{Cov}(X_k u_k, Y_k v_k)\)。
b) 将 \(X_k\) 和 \(Y_k\) 投影到奇异向量上以获得得分:\(\xi_k = X_k u_k\) 和 \(\omega_k = Y_k v_k\)
c) 将 \(X_k\) 对 \(\xi_k\) 进行回归,即找到一个向量 \(\gamma_k \in \mathbb{R}^d\),使得秩1矩阵 \(\xi_k \gamma_k^T\) 尽可能接近 \(X_k\)。对 \(Y_k\) 使用 \(\omega_k\) 执行相同的操作以获得 \(\delta_k\)。向量 \(\gamma_k\) 和 \(\delta_k\) 称为载荷。
d) 降阶(deflate) \(X_k\) 和 \(Y_k\),即减去秩1近似:\(X_{k+1} = X_k - \xi_k \gamma_k^T\),以及 \(Y_{k + 1} = Y_k - \omega_k \delta_k^T\)。
最后,我们将 \(X\) 近似为秩1矩阵的和:\(X = \Xi \Gamma^T\),其中 \(\Xi \in \mathbb{R}^{n \times K}\) 的列包含得分,\(\Gamma^T \in \mathbb{R}^{K \times d}\) 的行包含载荷。对于 \(Y\) 类似,我们有 \(Y = \Omega \Delta^T\)。
请注意,得分矩阵 \(\Xi\) 和 \(\Omega\) 分别对应于训练数据 \(X\) 和 \(Y\) 的投影。
步骤 a) 可以通过两种方式执行:一种是计算 \(C\) 的完整 SVD 并仅保留具有最大奇异值的奇异向量,另一种是直接使用幂法计算奇异向量(参见 [1] 中第 11.3 节),这对应于 algorithm
参数的 'nipals'
选项。
转换数据#
为了将 \(X\) 转换为 \(\bar{X}\),我们需要找到一个投影矩阵 \(P\),使得 \(\bar{X} = XP\)。我们知道对于训练数据,\(\Xi = XP\),并且 \(X = \Xi \Gamma^T\)。将 \(P = U(\Gamma^T U)^{-1}\) 设置为列中包含 \(u_k\) 的矩阵 \(U\),我们有 \(XP = X U(\Gamma^T U)^{-1} = \Xi (\Gamma^T U) (\Gamma^T U)^{-1} = \Xi\),这正是我们想要的。旋转矩阵 \(P\) 可以通过 x_rotations_
属性访问。
类似地,\(Y\) 可以使用旋转矩阵 \(V(\Delta^T V)^{-1}\) 进行转换,该矩阵通过 y_rotations_
属性访问。
预测目标 Y
#
为了预测某些数据 \(X\) 的目标,我们正在寻找一个系数矩阵 \(\beta \in R^{d \times t}\),使得 \(Y = X\beta\)。
其思想是尝试将转换后的目标 \(\Omega\) 预测为转换后样本 \(\Xi\) 的函数,通过计算 \(\alpha \in \mathbb{R}\) 使得 \(\Omega = \alpha \Xi\)。
然后,我们有 \(Y = \Omega \Delta^T = \alpha \Xi \Delta^T\),并且由于 \(\Xi\) 是转换后的训练数据,我们有 \(Y = X \alpha P \Delta^T\),因此系数矩阵为 \(\beta = \alpha P \Delta^T\)。
\(\beta\) 可以通过 coef_
属性访问。
1.8.2. PLSSVD#
PLSSVD
是前面描述的 PLSCanonical
的简化版本:它不是迭代地对矩阵 \(X_k\) 和 \(Y_k\) 进行降阶,而是只计算 \(C = X^TY\) 的 SVD 一次,并将与最大奇异值对应的 n_components
个奇异向量存储在矩阵 U
和 V
中,这些分别对应于 x_weights_
和 y_weights_
属性。在这里,转换后的数据简单地是 transformed(X) = XU
和 transformed(Y) = YV
。
如果 n_components == 1
,则 PLSSVD
和 PLSCanonical
严格等效。
1.8.3. PLSRegression#
PLSRegression
估计器与使用 algorithm='nipals'
的 PLSCanonical
相似,但有2个显著差异:
在步骤 a) 中,用于计算 \(u_k\) 和 \(v_k\) 的幂法中,\(v_k\) 从不归一化。
在步骤 c) 中,目标 \(Y_k\) 使用 \(X_k\) 的投影(即 \(\xi_k\))而不是 \(Y_k\) 的投影(即 \(\omega_k\))进行近似。换句话说,载荷的计算方式不同。因此,步骤 d) 中的降阶也会受到影响。
这两个修改会影响 predict
和 transform
的输出,它们与 PLSCanonical
不同。此外,在 PLSCanonical
中组件数量受 min(n_samples, n_features, n_targets)
限制,而在这里,限制是 \(X^TX\) 的秩,即 min(n_samples, n_features)
。
PLSRegression
也被称为 PLS1(单目标)和 PLS2(多目标)。与 Lasso
非常相似,PLSRegression
是一种正则化线性回归形式,其中组件数量控制正则化强度。
1.8.4. 典型相关分析#
典型相关分析是在 PLS 之前独立开发的。但事实证明,CCA
是 PLS 的一个特例,在文献中对应于 PLS 的“模式 B”。
CCA
与 PLSCanonical
的区别在于步骤 a) 的幂法中计算权重 \(u_k\) 和 \(v_k\) 的方式。详细信息可在 [1] 的第 10 节中找到。
由于 CCA
涉及到 \(X_k^TX_k\) 和 \(Y_k^TY_k\) 的求逆,如果特征或目标的数量大于样本数量,则此估计器可能不稳定。
参考文献
示例