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]。

RR KRR
More restricted More flexible
O\left(D^3+D^2N \right ) for training O \left(N^3 \right ) for training
O \left(D \right ) for prediction O \left( N \right )  for prediction
Efficient when N \gg D Hard 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]

 

如有错误,欢迎指正。联系方式:[email protected]

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

 

你可能感兴趣的:(Machine,Learning)