Kernel Ridge Regression(KRR,核脊回归) 是Ridge Regression(RR,脊回归)的kernel版本,与Support Vector Regression(SVR,支持向量回归)类似。所以,在这里,我们先大致了解RR的来源,由此引入KRR,再来了解KRR与RR、KRR与SVR等之间的关系,最后再详细推导KRR的整个过程。
在线性回归的过程中,我们一般用最小二乘法计算线性回归模型的参数。如果数据的集合矩阵(或设计矩阵,design matrix)存在多重线性时,则该最小二乘法会对噪音十分敏感,使得所得结果不稳定。为了解决这个问题,Ridge Regression(RR)就诞生了。
具体一点来说,当设计矩阵存在多重线性时(在数学上被称为病态矩阵),由最小二乘法计算出的参数在数值上会非常大,使得在线性模型中,当输入变量有微小的变动时,输出变量就会变化很大。这就是该类型的线性回归模型对输入变量的噪音很敏感的原因。
所以 如果能够限制参数的数值大小,使得它不会变的特别大,对噪音的敏感度降低,那就能解决问题了。而这就是脊回归(RR)或Lasso回归的基本思想。RR和Lasso回归的限制方法是:在原来最小二乘法模型的基础上加一个惩罚项,这个过程也叫作正则化(Regularization)。如果惩罚项是参数的范数,则是RR;如果是参数的范数,则是Lasso回归。[1]
所以,脊回归的目标函数为:
,
其中,是的k设计矩阵,是特征向量,是平衡损失与正则项之间的一个系数,。我们需要最小化该目标函数。对以上的目标函数的参数求导,并令其等于0,可以得到最优解为[2]:
linear RR 与KRR的不同之处在于,RR更加restricted,KRR更加flexible。这两种方法是efficiency与flexibility的较量[4]。
RR | KRR |
More restricted | More flexible |
for training | for training |
for prediction | for prediction |
Efficient when | Hard for big data |
从以上对RR的简述,我们可以知道,实际上,RR的目的是学习得到特征与因变量之间的映射关系。至于为什么需要在目标函数中引入第二项的正则项,除了上述的原因之外,我们也可以这么理解:因为特征有时可能会很高维(样本数量少于变量个数),使得所学的参数可能会很大,所以有必要限制的大小。
而至于为什么需要引入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]
KRR与SVR的学习形式是相同的。两个都有正则项,只是两者的损失函数不同。KRR使用的是均方误差,而SVR使用的是epsilon-insensitive的损失函数,即,。
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的是稀疏的(),所以此时KRR速度会慢于SVR。
.
在Why RR?这一小节中,我们提到RR的最优解为:。为了扩展到核空间,我们必须把这个参数的最优转换成具有内积的形式。如何做呢?我们可以使用The matrix inverse lemma[2],重写为: ,即,我们可以直接扩展在核空间下:。具体转换的过程如下:
The matrix inverse lemma为。令
所以,
定义对偶变量(dual variables): (N*D = N*N * N*D)
所以我们的原始变量(primal variable)为: (D*D = D*N * N*D = D*1 * 1*D) 应转置
因此,实际上是一个个训练样本的线性组合形式。在计算预测均值时,我们会有:
。
也就是,同理,我们令
或者,我们可以写成:
In the feature space, matrix form:
通过用Gram矩阵代替,参数转换成,
。
即估计的函数为:
.
可以参考scikit-learn中给出的例子。[6]
如有错误,欢迎指正。联系方式:[email protected]。
[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