使用 PLS 算法进行降维

Beginner

This tutorial is from open-source community. Access the source code

简介

scikit-learn 中的 cross_decomposition 模块包含用于降维和回归的监督估计器,特别是用于偏最小二乘法(PLS)算法。这些算法通过将两个矩阵投影到低维子空间来找到它们之间的基本关系,使得变换后的矩阵之间的协方差最大。

在本实验中,我们将探索 scikit-learn 提供的不同交叉分解算法,并学习如何将它们用于降维和回归任务。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到 笔记本 标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作的验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

导入必要的库

让我们开始为本实验导入必要的库。

import numpy as np
from sklearn.cross_decomposition import PLSRegression, PLSCanonical, CCA, PLSSVD

加载数据集

接下来,我们将加载一个示例数据集来演示交叉分解算法。为简单起见,我们将创建两个具有随机值的矩阵 XY

np.random.seed(0)
X = np.random.random((100, 5))
Y = np.random.random((100, 3))

偏最小二乘回归(PLSRegression)

拟合 PLSRegression 模型

我们将从“偏最小二乘回归(PLSRegression)”算法开始,它是一种正则化线性回归形式。我们将把这个模型拟合到我们的数据上。

pls = PLSRegression(n_components=2)
pls.fit(X, Y)
转换数据

我们可以使用拟合好的模型对原始数据进行转换。转换后的数据维度将会降低。

X_transformed = pls.transform(X)
Y_transformed = pls.transform(Y)

典型相关分析偏最小二乘法(PLSCanonical)

拟合 PLSCanonical 模型

接下来,我们将使用“典型相关分析偏最小二乘法(PLSCanonical)”算法,该算法用于找出两个矩阵之间的典型相关性。当特征之间存在多重共线性时,此算法很有用。

plsc = PLSCanonical(n_components=2)
plsc.fit(X, Y)
转换数据

我们可以使用拟合好的模型对原始数据进行转换。转换后的数据维度将会降低。

X_transformed = plsc.transform(X)
Y_transformed = plsc.transform(Y)

典型相关分析(CCA)

拟合 CCA 模型

“典型相关分析(CCA)”算法是偏最小二乘法(PLS)的一种特殊情况,代表典型相关分析。它用于找出两组变量之间的相关性。

cca = CCA(n_components=2)
cca.fit(X, Y)
转换数据

我们可以使用拟合好的模型对原始数据进行转换。转换后的数据维度将会降低。

X_transformed = cca.transform(X)
Y_transformed = cca.transform(Y)

偏最小二乘奇异值分解(PLSSVD)

拟合 PLSSVD 模型

“偏最小二乘奇异值分解(PLSSVD)”算法是“典型相关分析偏最小二乘法(PLSCanonical)”的简化版本,它仅对交叉协方差矩阵计算一次奇异值分解(SVD)。当成分数量限制为 1 时,此算法很有用。

plssvd = PLSSVD(n_components=1)
plssvd.fit(X, Y)
转换数据

我们可以使用拟合好的模型对原始数据进行转换。转换后的数据维度将会降低。

X_transformed = plssvd.transform(X)
Y_transformed = plssvd.transform(Y)

总结

在本实验中,我们探索了 scikit-learn 提供的交叉分解算法。我们了解了偏最小二乘回归(PLSRegression)、典型相关分析偏最小二乘法(PLSCanonical)、典型相关分析(CCA)和偏最小二乘奇异值分解(PLSSVD)。我们还看到了如何将这些模型拟合到数据上,以及如何将数据转换为低维表示。这些算法对于降维和回归任务很有用,特别是当特征之间存在多重共线性或变量数量大于样本数量时。