偏最小二乘法回归(Partial Least Squares Regression)

文章介绍了线性回归在特征多于样本数且线性相关时的问题,提出通过PCA降低维度并解决矩阵不可逆问题。接着详细阐述了主成分分析(PCA)和部分最小二乘回归(PLSR)的原理、步骤,以及如何在Python中使用sklearn库实现PLSRegression。PLSR结合PCA和典型关联分析,提供了更有效的数据映射和预测手段。
摘要由CSDN通过智能技术生成

1、存在问题

最早的 Linear Regression 的缺点:如果样例数 m 相比特征数 n 少,或者特征间线性相关时,由于 X^{T}Xn*n 矩阵)的秩小于特征个数(即 X^{T}X 不可逆)。因此最小二乘法  \theta =(X^{T}X)^{-1}X^{T}y 就会失效。

为了解决这个问题,利用 PCA 对样本 Xm*n 矩阵)进行降维,假设降维之后的 X 为 xm*r 矩阵),那么 x 的秩为 r(列不相关)。

2、主成分分析(Principal Component Analysis, PCA)

PCA 是一种常用的数据分析方法。PCA 通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。

X 表示样本,含有 m 个样例 {x^{(1)},x^{(2)},...,x^{(m)}},每个样例特征维度为 nx^{(i)}={x_{1}^{(i)},x_{2}^{(i)},...x_{n}^{(i)}}。假设我们已经做了每个特征均值为 0 处理。

如果 X 的秩小于 n,那么 X 的协方差矩阵  \frac{1}{m}X^{T}X 的秩小于 n,因此直接使用线性回归的话不能使用最小二乘法来求解出唯一的 \theta,利用 PCA 来使X^{T}X可逆,这样就可以用最小二乘法来进行回归了,这样的称为主元回归(PCR)。

PCA的表示形式: 

(1)当 P 为 n*n 时,P^{T}=P^{-1},则有  T=XP\rightarrow TP^{T}=XPP^{T}\rightarrow X=TP^{T}

即  X=M_{1}+M_{2}+M_{3}+...+M_{n}=t_{1}p_{1}^{T}+t_{2}p_{2}^{T}+t_{3}p_{3}^{T}+...+t_{n}p_{n}^{T}=TP^{T}

(假设 X 秩为 n

(2)当 P 为 n*r 时,需要舍弃特征值较小的特征向量,上式变为:

X=M_{1}+M_{2}+M_{3}+...+M_{r}+E=t_{1}p_{1}^{T}+t_{2}p_{2}^{T}+t_{3}p_{3}^{T}+...+t_{r}p_{r}^{T}+E

其中,M 为样本 X 的单个特征量,E 为残差矩阵,p_{i} 是 X^{T}X 第 i 大特征值对应的归一化后的特征向量,t_{i} 就是 X 在 p_{i} 上的投影。

3、PLSR思想及步骤

(1)思想来源

典型关联分析(Canonical Correlation Analysis, CCA)是将 X 和 Y 分别投影到直线得到 u 和 v,然后计算 u 和 v 的 Pearson 系数(也就是  Corr(u,v)),认为相关度越大越好。用公式可表示为:

a^{T}Cov(x,y)b\rightarrow Maximize    Subject.to: a^{T}Var(x)a=1, b^{T}Var(y)b=1

其中 a 和 b 就是要求的投影方向。缺点在于对特征的处理方式比较粗糙,用的是线性回归来表示 u 和 x 的关系,u 也是 x 在某条线上的投影,因此会存在线性回归的一些缺点;同时 CCA 是寻找 X 和 Y 投影后 u 和 v 的关系,显然不能通过该关系来还原出 X 和 Y ,也就是找不到 X 到Y 的直接映射。

而 PLSR 结合 PCA 和 CCA 的方法,将样本 X 中的数据点按特征进行 PCA 之后,拆接出单个映射方向的特征向量及投影,再用投影对 Y 做单个方向的回归即可实现 X 到 Y 的映射。

(2)主要步骤

1)设 X 和 Y 都已经过标准化(包括减均值、除标准差等)

2)设 X 的第一个主成分为 p_{1}Y 的第一个主成分为 q_{1},两者都经过了单位化。(这里的主成分并不是通过 PCA 得出的主成分)

3)u_{1}=Xp_{1}v_{1}=Yq_{1}

4)Var(u_{1})\rightarrow max, Var(v_{1})\rightarrow max,即在主成分上的投影,期望是方差最大化

5)Corr(u_{1},v_{1})\rightarrow max,这个跟 CCA 的思路一致

6)综合 4)和 5),得到优化目标   Cov(u_{1},v_{1})=[Var(u_{1})Var(v_{1})]^{-\frac{1}{2}}Corr(u_{1},v_{1})\rightarrow max

用公式可表示为:(Xp_{1},Yq_{1})\rightarrow Maximize  Subject. to: \left \| p_{1} \right \|=1,\left \| q_{1} \right \|=1

(3)优化问题求解

引入拉格朗日乘子:

\zeta =p_{1}^{T}X^{T}Yq_{1}-\frac{\lambda }{2}\left ( p_{1}^{T}p_{1}-1\right )-\frac{\theta }{2}\left ( q_{1} ^{T}q_{1}-1\right )

分别对 p_{1}q_{1} 求偏导,得

\frac{\partial \zeta }{\partial p_{1}}=X^{T}Yq_{1}-\lambda p_{1}=0   

\frac{\partial \zeta }{\partial q_{1}}=Y^{T}Xp_{1}-\theta q_{1}=0

从上边可以看出 \lambda =\theta(两边都乘以 p 或 q,再利用 =1 的约束)

下式代入上式得到 X^{T}YY^{T}Xp_{1}=\lambda ^{2}p_{1}     

上式代入下式得到 Y^{T}XX^{T}Yq_{1}=\lambda ^{2}q_{1}

目标函数 (Xp_{1},Yq_{1})\rightarrow p_{1}^{T}X^{T}Yq_{1}\rightarrow p_{1}^{T}(\lambda p_{1})\rightarrow \lambda,要求最大。

因此 p_{1} 就是对称阵X^{T}YY^{T}X 的最大特征值对应的单位特征向量,q_{1} 就是 Y^{T}XX^{T}Y 最大特征值对应的单位特征向量。

求得 p_{1} 和 q_{1},即可得到 

u_{1}=Xp_{1}v_{1}=Yq_{1}

利用 PCA 可建立回归方程:

X=u_{1}c_{1}^{T}+E, Y=v_{1}d_{1}^{T}+G

(4)残差矩阵求解

1) Y=u_{1}r_{1}^{T}+F,使用 u_{1} 对 Y 进行回归,即先利用 X 的主成分对 Y 进行回归

2)使用最小二乘法,计算 cdr 分别为:

c_{1}=\frac{X^{T}u_{1}}{\left \| u_{1} \right \|^{2}} 

 d_{1}=\frac{Y^{T}v_{1}}{\left \| v_{1} \right \|^{2}} 

 r_{1}=\frac{Y^{T}u_{1}}{\left \| u_{1} \right \|^{2}} (这一步计算出各个投影向量)

p_{1} 和 c_{1} 的关系如下:

p_{1}^{T}c_{1}=p_{1}^{T}\frac{X^{T}u_{1}}{\left \| u_{1} \right \|^{2}}=\frac{u_{1}^{T}u_{1}}{\left \| u_{1} \right \|^{2}}=1

3)将剩余的 E 当做新的 X,剩余的 F 当做新的 Y,然后按照前面的步骤求出 p_{2} 和 q_{2}

得到:u_{2}=Ep_{2}v_{2}=Fq_{2}

目标函数 (Ep_{2},Fq_{2})\rightarrow p_{2}^{T}E^{T}Fq_{2}\rightarrow p_{2}^{T}(\lambda p_{2})\rightarrow \lambda ,这个与前面一样,p_{2} 和 q_{2} 分别是新的 E^{T}FF^{T}E 和 F^{T}EE^{T}F 的最大特征值对应的单位特征向量。

4)计算得到第二组回归系数:

c_{2}=\frac{E^{T}u_{2}}{\left \| u_{2} \right \|^{2}}

r_{2}=\frac{F^{T}u_{2}}{\left \| u_{2} \right \|^{2}}

这里的 u_{2} 和之前的 u_{1} 是正交的,证明如下:u_{1}^{T}u_{2}=u_{1}^{T}Ep_{2}=u_{1}^{T}(X-u_{1}c_{1}^{T})p_{2}=\left [ u_{1}^{T}X-u_{1}^{T}u_{1}\frac{u_{1}^{T}X}{\left \| u_{1} \right \|^{2}} \right ]p_{2}=0

其实 u_{i} 和不同 u_{j} 都是相互正交的,同样 p_{i} 和不同的 p_{j} 也是正交的,但 c_{i} 和不同的 c_{j} 一般不是正交的

5)从上一步得到回归方程:

E=u_{2}c_{2}^{T}+E^{'}F=u_{2}r_{2}^{T}+F^{'}

如果还有残差矩阵的话,可以继续计算下去。

6)如此计算下去,最终得到:

X=u_{1}c_{1}^{T}+u_{2}c_{2}^{T}+u_{3}c_{3}^{T}+...+u_{n}c_{n}^{T}+EY=u_{1}r_{1}^{T}+u_{2}r_{2}^{T}+u_{3}r_{3}^{T}+...+u_{n}r_{n}^{T}+F

写成矩阵形式为:

X=UC^{T}+E

Y=UR^{T}+F=XPR^{T}+F=XB+F

这就是 X\rightarrow Y 的回归过程,其中 B=PR^{T}

7)使用 PLSR 来预测:从6)中可以发现 Y 其实是多个回归的叠加(其实 u_{1}r_{1}^{T} 已经回归出 Y 的最主要信息)。在计算模型的过程中,得到了 p 和 r。那么新来的 x,首先计算 u(这里的u变成了实数,而不是向量),得到 u_{1}=x^{T}p_{1},u_{2}=x^{T}p_{2},u_{3}=x^{T}p_{3}...,然后代入 Y 的式子即可求出预测的 y 向量,或者直接代入 y^{T}=x^{T}B

8)至此,PLSR 的主要步骤结束。

4、python代码实现

import pandas as pd
import numpy as np
from sklearn.cross_decomposition import PLSRegression
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score

# 读取数据
data = pd.read_csv(‘path’)

# 准备数据, 以回归为例
y = data[:, -1]
x = data[:, :-1]

# 训练集、测试集划分
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25,random_state= 42)

# 回归模型、参数
pls_model = PLSRegression(scale=True)
param_grid = {'n_components': range(1, 20)}

# GridSearchCV 优化参数、训练模型
gsearch = GridSearchCV(pls_model, param_grid)
pls_models = gsearch.fit(x_train, y_train)

# 打印 coef
print('Partial Least Squares Regression coefficients:',pls_models.best_estimator_.coef_)

# 对测试集做预测
pls_prediction = pls_model.predict(x_test)

# 计算 R2,MSE
pls_r2 = r2_score(y_test,pls_prediction)
pls_mse = np.sqrt(mean_squared_error(y_test,pls_prediction))

『本文参考』

[1] 偏最小二乘法回归(Partial Least Squares Regression) - JerryLead - 博客园 (cnblogs.com)

[2] python 偏最小二乘回归实现-CSDN博客

[3] sklearn.cross_decomposition.PLSRegression — scikit-learn 1.3.1 documentation

免责声明:部分文章整合自网络,因内容庞杂无法联系到全部作者,如有侵权,请联系删除,我们会在第一时间予以答复,万分感谢。

最后,祝大家科研顺利!

  • 33
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值