Kernel Ridge Regression 详解过程

Kernel Ridge Regression(KRR,核脊回归) 是Ridge Regression(RR,脊回归)的kernel版本,与Support Vector Regression(SVR,支持向量回归)类似。所以,在这里,我们先大致了解RR的来源,由此引入KRR,再来了解KRR与RR、KRR与SVR等之间的关系,最后再详细推导KRR的整个过程。

 

Why RR?

在线性回归的过程中,我们一般用最小二乘法计算线性回归模型的参数w。如果数据的集合矩阵(或设计矩阵,design matrix)X存在多重线性时,则该最小二乘法会对噪音十分敏感,使得所得结果不稳定。为了解决这个问题,Ridge Regression(RR)就诞生了。

具体一点来说,当设计矩阵X存在多重线性时(在数学上被称为病态矩阵),由最小二乘法计算出的参数w在数值上会非常大,使得在线性模型y=w^Tx中,当输入变量x有微小的变动时,输出变量y就会变化很大。这就是该类型的线性回归模型对输入变量x的噪音很敏感的原因。 

所以 如果能够限制参数w的数值大小,使得它不会变的特别大,对噪音的敏感度降低,那就能解决问题了。而这就是脊回归(RR)或Lasso回归的基本思想。RR和Lasso回归的限制方法是:在原来最小二乘法模型的基础上加一个惩罚项,这个过程也叫作正则化(Regularization)。如果惩罚项是参数wl_2范数,则是RR;如果是参数wl_1范数,则是Lasso回归。[1]

 

所以,脊回归的目标函数为:

J(w)=(y-Xw)^T(y-Xw)+\lambda ||w||^2,

其中,XN \times D的k设计矩阵,x \in \mathbb{R}^D是特征向量,\lambda是平衡损失与正则项之间的一个系数,\lambda \geq 0。我们需要最小化该目标函数。对以上的目标函数的参数w求导,并令其等于0,可以得到最优解为[2]:

w=\left( X^{T}X +\lambda I_{D}\right)^{-1} X^{T}y=\left(\sum_i x_ix_i^T+\lambda I_D \right )^{-1}X^Ty

linear RR 与KRR的不同之处在于,RR更加restricted,KRR更加flexible。这两种方法是efficiency与flexibility的较量[4]。

RRKRR
More restrictedMore flexible
O\left(D^3+D^2N \right ) for trainingO \left(N^3 \right ) for training
O \left(D \right ) for predictionO \left( N \right )  for prediction
Efficient when N \gg DHard for big data

 

Why inducing Kernel?

从以上对RR的简述,我们可以知道,实际上,RR的目的是学习得到特征X与因变量y之间的映射关系。至于为什么需要在目标函数中引入第二项的正则项,除了上述的原因之外,我们也可以这么理解:因为特征X有时可能会很高维(样本数量少于变量个数),使得所学的参数w可能会很大,所以有必要限制w的大小。

而至于为什么需要引入kernel呢?其实,将kernel trick应用到distance-based的方法中是很直接的,因为kernel函数本身就是一个distance-based的函数。可能我们会发现,基于distance的方法,都会有对应的一个kernel版本的扩展。此外,从实际应用来看, 因为数据可能是非线性的,单纯地假设真实数据服从线性关系,并用线性模型来回归真实的非线性数据,效果想必不会好。所以,引入kernel还能有一个好处,就是:引入kernel的RR,也就是KRR,能够处理非线性数据,即,将数据映射到某一个核空间,使得数据在这个核空间上线性可分。一句话,就是:KRR learns a linear function in the space induced by the respective kernel which corresponds to a non-linear function in the original space. The linear function in the kernel space is chosen based on the mean-squared error loss with ridge regularization.[5]

 

Relationship with SVR

KRR与SVR的学习形式是相同的。两个都有l_2正则项,只是两者的损失函数不同。KRR使用的是均方误差,而SVR使用的是epsilon-insensitive的损失函数,即,\max \left(0,\left | y- h_{\theta}\left(x)\right | - \epsilon \right )

 In contrast to SVR, fitting a KRR model can be done in closed-form and is typically faster for medium-sized datasets. On the other hand, the learned model is non-sparse and thus slower than SVR, which learns a sparse model for epsilon > 0, at prediction-time.[3] 这是引自[3]中的一句原话,我的理解是:在训练的过程中,KRR能够得出解析解,而且在处理中度规模的数据集时,会很有速度;但是,在做预测时,因为KRR所学到的参数是非稀疏的,而SVR的是稀疏的(\epsilon > 0),所以此时KRR速度会慢于SVR。

.

Kernel Ridge Regression

在Why RR?这一小节中,我们提到RR的最优解为:w=\left( X^{T}X +\lambda I_{D}\right)^{-1} X^{T}y=\left(\sum_i x_ix_i^T+\lambda I_D \right )^{-1}X^Ty。为了扩展到核空间,我们必须把这个参数w的最优转换成具有内积的形式。如何做呢?我们可以使用The matrix inverse lemma[2],重写为:w= X^{T} \left( X X^{T} +\lambda I_{N }\right)^{-1} y ,即,我们可以直接扩展在核空间下:w=\phi ( X)^{T}\left( \phi ( X) \phi ( X)^{T} +\lambda I_{N}\right)^{-1} \phi (y)。具体转换的过程如下:

The matrix inverse lemma为\left( P^{-1} +B^{T} R^{-1} B\right)^{-1} B^{T} R^{-1} =PB^{T}\left( BPB^{T} +R\right)^{-1}。令

B=X ,P=\dfrac{1}{\lambda } I_{D } ,R=I_{N},则有,

\left( X^{T} X +\lambda I_{D}\right)^{-1} X^{T} = \dfrac{1}\lambda I_{D} X^T (X \dfrac{1}\lambda I_{D} X^T + I_N)^{-1}

                                  = \dfrac{1}\lambda X^T (\dfrac{1}\lambda X X^T + I_N)^{-1}

                                  = X^T (X X^T +\lambda I_N)^{-1}

所以,

w=\left( X^{T} X+\lambda I_{D}\right)^{-1}X^{T} y =X^{T}\left( XX^{T} +\lambda I_{N}\right)^{-1} y

定义对偶变量\alpha(dual variables):\alpha = \left( K_X + \lambda I_N \right )^{-1} y (N*D = N*N * N*D)

所以我们的原始变量w(primal variable)为:w = X^T \alpha = \sum _{i=1}^{N} \alpha_i \bf{x}_i   (D*D =  D*N * N*D = D*1 * 1*D) \alpha应转置

因此,w实际上是一个N个训练样本的线性组合形式。在计算预测均值时,我们会有:

\hat f (x) = w^T \bf{x} = \sum_{i=1}^N \alpha_i x_i^T x = \sum_{i=1}^N \alpha_i \kappa(x,x_i)

 

也就是,同理,我们令

B=\phi ( X) ,P=\dfrac{1}{\lambda } I_{\infty } ,R=I_{N},则有,

\left( \phi ( X)^{T} \phi ( X) +\lambda I_{\infty }\right)^{-1} \phi ( X)^{T} =\dfrac{1}{\lambda } I_{\infty } \phi ( X)^{T}\left( \phi ( X)\dfrac{1}{\lambda } I_{\infty } \phi ( X)^{T} +I_{N}\right)^{-1}

                                                  =\dfrac{1}{\lambda } \phi ( X)^{T}\left(\dfrac{1}{\lambda }\left( \phi ( X) \phi ( X)^{T} +\lambda I_{N}\right)\right)^{-1}

                                                  =\phi ( X)^{T}\left( \phi ( X) \phi ( X)^{T} +\lambda I_{N}\right)^{-1}

或者,我们可以写成:

In the feature space, matrix form: $\displaystyle \phi ( y) =F( X) +\phi ( E) =\phi ( X) \times w+\phi ( E)$

通过用Gram矩阵K代替XX^T,参数w转换成,

w=\left( \phi ( X)^{T} \phi ( X) +\lambda I_{\infty }\right)^{-1} \phi ( X)^{T} \phi\left(y \right ) =\phi (X)^{T}\left( \phi ( X) \phi ( X)^{T} +\lambda I_{N}\right)^{-1} \phi\left(y \right )

                                                                  = \phi ( X)^{T}\left(K_X +\lambda I_{N}\right)^{-1} \phi (y)

即估计的函数F为:

\hat F(X)=\phi ( X) \times w =\phi ( X) \phi ( X)^{T}\left( \phi ( X)^{T} \phi ( X) +\lambda I_{\ }_{N}\right)^{-1} \phi ( y)

                                 =K_{X}( K_{X} +\lambda I_{N})^{-1} \phi (y).

 

Example

可以参考scikit-learn中给出的例子。[6]

 

如有错误,欢迎指正。联系方式:yanazeng013@gmail.com。

References

[1] https://blog.csdn.net/daunxx/article/details/51578787

[2] Kevin P. Murphy “Machine Learning: A Probabilistic Perspective”, The MIT Press chapter 14.4.3, pp. 492-493

[3] https://scikit-learn.org/stable/modules/generated/sklearn.kernel_ridge.KernelRidge.html#sklearn.kernel_ridge.KernelRidge  

[4] https://redstonewill.com/477/

[5] https://scikit-learn.org/stable/auto_examples/gaussian_process/plot_compare_gpr_krr.html#sphx-glr-auto-examples-gaussian-process-plot-compare-gpr-krr-py

[6] https://scikit-learn.org/stable/modules/generated/sklearn.kernel_ridge.KernelRidge.html#sklearn.kernel_ridge.KernelRidge

 

### 岭回归与支持向量回归(SVR)的实现方法、区别与联系 #### 岷回归 (Ridge Regression) 岭回归是一种线性回归模型,通过引入正则化项来解决多重共线性和过拟合问题。其目标是最小化损失函数加上 L2 正则化项: \[ L(\beta) = \sum_{i=1}^{n}(y_i - X_i\beta)^2 + \alpha ||\beta||_2^2 \] 其中 \( \alpha \) 是正则化参数,控制着惩罚项的影响程度[^1]。 以下是使用 `scikit-learn` 的 Ridge 类实现岭回归的一个简单例子: ```python from sklearn.linear_model import Ridge from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error, r2_score # 数据集划分 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 初始化并训练模型 ridge = Ridge(alpha=1.0) ridge.fit(X_train, y_train) # 预测与评估 pre_y = ridge.predict(X_test) mse = mean_squared_error(y_test, pre_y) r2 = r2_score(y_test, pre_y) print(f"MSE: {mse}, R2 Score: {r2}") ``` #### 支持向量回归 (Support Vector Regression, SVR) SVR 是一种基于支持向量机 (SVM) 的回归算法。它试图找到一条能够最大程度覆盖数据点的超平面,并允许一定范围内的误差不被计入损失函数。SVR 使用核函数(如线性核、多项式核或径向基核)将输入空间映射到高维特征空间,从而处理非线性关系[^2]。 下面是一个简单的 SVR 实现示例: ```python from sklearn.svm import SVR from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error, r2_score # 数据集划分 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 初始化并训练模型 svr = SVR(kernel='rbf', C=1.0, epsilon=0.1) svr.fit(X_train, y_train) # 预测与评估 pre_y = svr.predict(X_test) mse = mean_squared_error(y_test, pre_y) r2 = r2_score(y_test, pre_y) print(f"MSE: {mse}, R2 Score: {r2}") ``` #### 区别 1. **核心理念不同**: - 岭回归的核心在于最小二乘法基础上加入 L2 正则化,主要用于减少模型复杂度和防止过拟合。 - SVR 则是寻找一个最优边界,在该边界的范围内忽略误差,超出部分才计算损失。 2. **适用场景差异**: - 岭回归更适合于线性可分的数据集以及存在多重共线性的场合。 - SVR 更适合处理复杂的非线性关系,尤其是当数据分布较为稀疏或者维度较高时表现更佳。 3. **性能对比**: - 岭回归通常具有较低的时间复杂度,适用于大规模数据集上的快速建模。 - SVR 计算成本相对更高,尤其是在样本数量较大时可能面临效率瓶颈。 #### 联系 尽管两者在理论基础和技术细节上有所差别,但它们都属于监督学习中的回归技术范畴。二者都可以用于连续数值型变量的预测任务,并且都需要经过交叉验证调整超参数以优化最终的表现效果。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值