Support Vector Regression(SVR)

上一篇中的内容是 KLRkernel logistic regression 。这个问题的出发点是我们想要把 SVM 这个强大的工具用在 soft binary classification ,我们有两种选择: 第一种方法可以称之为 two level learning :第一阶段做 SVM ;第二阶段将 SVM 的结果使用 logistic regression 进行微调。第二种方法是使用 representer theorem 理论直接将 logistic regression 转换为一个 kernel 的形式。这篇将简单讲述如何将一般的 regression 变为 kernel 的形式。

Kernel Ridge Regression

回顾Representer Theorem

如果求解的问题是带有 regularized L2 - regularization )的 linear model ,那么最佳的 w 将是z的线性组合。即任何的 L2 - regularized linear model 都可以变为 kernel 的形式。那么如何利用这个理论基础把之前学习过的 regression 变为 kernel 的形式将是我们这节的重点。

线性回归

在线性回归中我们使用平方误差来衡量真实值和预测值之间的 error( 称为 square error) ,然后通过最小化这个 error 来得到最佳的解。

err(y,wTz)=(ywTz)2

如果在线性回归的基础上加上 regularization 的话得到的模型我们称之为 ridge regression ,即有 regularization linearregression 的形式。这节将讲述的是, 怎么把 ridge regression 加上 kernel 得到我们想要的 kernel ridge regression

linear regression 或者是 ridge regression 中,我们可以得到问题的 analytic solution 。即解析解。同样我们希望 kernel ridge regression 也可以有 analytic solution

Kernel Ridge Regression问题

ridge regression 问题可以由如下的 (1) 式描述:

minwλNwTw+1Nn=1N(ynwTzn)2w=n=1Nβnzn(1)

因为已经知道了最佳解的形式,所以我们可以将最佳解带入原始的问题当中,这样就将问题从求解 w 变为求解β

minβλNn=1Nm=1NβnβmzTnzm+1Nn=1N(ynm=1NβmzTmzn)2

这样就可以使用 核技巧得到如下的 Kernel Ridge Regression 问题:
minβλNn=1Nm=1NβnβmK(xn,xm)+1Nn=1N(ynm=1NβmK(xm,xn))2

原来要求解的是一个关于 w 的问题,现在根据representer theorem转换为一个求解关于 β 的问题,这样就隐含的将原来关于 w 的问题求解了, 在求解β的问题时可以使用 kernel trick 将所有 z z的乘积换成是 Kernel 的形式。这样就得到了 Kernel Ridge Regression
可以将 kernel ridge regression 看做是 β 的线性模型,其中 β 的复杂度有关; 则是 β 的线性组合,组合的项是经过 kernel 转换之后的特征。所以 β 的一个 regularizer error 的部分。

化简为矩阵的形式:

minβλNβTKβ+1N(βTKTKβ2βTKTy+yTy)

如果我们可以求得这个问题的解,那么就可以将之前学到过的 kernel (多项式核,高斯核等)用在 ridge regression 上,

如何求解Kernel Ridge Regression

Kernel Ridge Regression

minβλNβTKβ+1N(βTKTKβ2βTKTy+yTy)

这个问题是一个无约束的最优化问题,所以先求梯度
Eaug(β)=λNβTKβ+1N(βTKTKβ2βTKTy+yTy)

Eaug(β)=2λNKβ+1N(2KTKβ2KTy)=2N(λKTIβ+KTKβKTy)=2NKT((λI+K)βy)

我们想要求解 β 使得梯度为0,即 Eaug(β)=0 ,所以可以使得 (λI+K)βy=0 , 解得:

β=(λI+K)1y

  • λ>0 ()1 总是存在的,因为 K 是半正定的(根据Mercer’s condition),λI+K是正定的。

这样就可以求出最佳的 β ,这样就得到了 ridge regression Z 空间中的解。

所以理论上,我们现在可以很轻易的做non linear regression之前为了做 non linear regression ,需要先使用非线性的转化,然后做 linear regression ,就可以做一个 nonlinearregression ;现在知道了另一种做 non linear regression 的方法,直接通过 kernel 求解在 Z 空间中的最优解。

最终得到的kernel ridge regression的模型:

g(x)=n=1NβnK(xn,x)

实例结果对比


这里写图片描述

  • 左边是 linear ridge regression 的解
    • w=(λI+XTX)1XTy
  • 右边是 kernel ridge regression 的解
    • β=(λI+K)1y

linear ridge regression (λI+XTX) d×d 的,该算法时间复杂度可以记为 O(d3+d2N) ;在 kernel ridge regression (λI+K) N×N 的。时间复杂度为 O(N3)

小结

所以当 N>d 的时候,使用 linear ridge regression 比较有效;当资料量 N 很大的时候,kernel ridge regression是比较难做的,但是它有很大的自由度,可以做出复杂的曲线。所以使用线性的模型,通常关注的是模型的复杂度和效率;但是当问题很复杂的时候,通常会使用 kernel 来对数据进行建模,只是缺点就是要付出计算上的复杂度。

Support Vector Regression Primal

软间隔SVM和LSSVM

linear regression 可以用来做 classification 所以 kernel ridge regression 也可以用来做 classification 用于 classification kernel ridge regression 有一个特别的名字叫做 least squares SVM(LSSVM) least squares 在强调的是,它所使用的是 error square error

对同样的资料分别利用使用 soft margin Gaussian SVM Gaussian LSSVM 进行分类的结果如下:


这里写图片描述

从图中可以看出,分隔边界没有几乎是一致的,但是相比 soft margin Gaussian SVM 来说, Gaussian LSSVM 得到的支持向量 SV (使用方框框起来的点)会更多一些,右图中的每一个都是 support vector 。为什么会有这样的结果呢? kernel ridge regression 中的 β 是使用 β=(λI+K)1y 算出来,并没有通过加什么限制条件使得这些 β 很稀疏。所以得到的每一个 β 几乎都不是0,那么所有的点就都是 support vector 。当 support vector 很多的时候,在做 predict 的时候,靠的是和每一个 SV 算出 kernel 然后和 β 的乘积和,即, g(x)=Nn=1βnK(xn,x) , 会多花很多的时间。
kernel logistic regression kernel ridge regression 求出来的都是很 dense β 。而 soft margin SVM 就具有比较好的性质,最后得到的 α 就是 sparse 的,即很多是0,只有少数不是0。这是从 KKT condition 得到的结果。

现在我们想要做的事情是, regression 能不能像 SVM 一样得到比较 sparse 的解?

Tube Regression

在使用平方误差 square error 的时候,不管真实值 y 和预测值s=wTx相差多远,哪怕只是相差一点点,也要记录在 error 中。现在我们对真实值和预测值之间的误差给一个容忍阈值 ϵ ,也把这个称为 tube 当真实值和预测值的差值不超过这个容忍阈值的时候,就不记录该差值。 结合下图就是说:假设容忍阈值的大小为紫色的宽度,那么所有出现在紫色中的点,虽然真实值和预测值之间存在差距,但是不予计较。

也就是说:

  • 如果 |sy|ϵ,error=0
  • 如果 |sy|>ϵ,error=|sy|ϵ

结合以上的讨论得到,如果错的超过了我们的阈值,不计较,此时 |sy|ϵ<0 ,即 err=0 ;如果错的超过了我们的阈值,就将 err 记为超过的部分。

err(y,s)=max(0,|sy|ϵ)

这个 error 通常被称为 ϵ insensitive error ,形式很像在 SVM 中的 hinge error 。这样做也是为了让 regression 和有 sparse 解的 SVM 取得关联。


这里写图片描述

我们现在要做的事情是,将带有 L2 regularized tube regression 进行一系列的推到得到它的稀疏的解 β

Tube和Squared Regression对比

  • tubeerr(y,s)=max(0,|ys|ϵ)
    这里写图片描述
  • squarederr(u,s)=(sy)2
    这里写图片描述

将两种 error 画在下图中,可以看出, |ys| 比较小的时候, tube squared error 其实是很接近的。当 |ys| 比较大的时候, squared 会上升的比较快,而 tube 则比较平缓。所以 squared 更容易受到噪音的影响,相对来说可能 tube 会好一点。稍后会看到,使用 ϵ insensitive error 这样的方式会让我们得到稀疏的解。


这里写图片描述

L2-Regularized Tube Regression

现在我们要求解的是一个带有 L2 - regularize 正则化因子的 tube regression 问题。

minwλNwTwregularize+1Nn=1Nmax(0,|wTzny|ϵ)tube error

回想一下 soft margin SVM 问题的求解过程, SVM 问题解决的是 L2 - Regularize 加上 margin violation 的最小化问题: min12wTw+Cmargin violation ,我们发现直接解决这样的一个问题是困难的,因为同样也会碰到 max 函数无法微分的问题,所以我们重新将其写成了一个 quadratic programming 的问题,这样就比较容易求解。然后通过求解该问题的对偶问题可以使用 kernel 技巧。同时 KKT conditional 会保证解的稀疏性。

所以我们现在要做的事情就是模仿 SVM 的解法来解决 tube regression 。所以先要将 tube regression 表示成一个 quadratic programming 的问题。

所以为了使得 tube regression 问题和 SVM 长的比较像,首先做如下的效的调整, SVM 中习惯用的参数是 C 而不是λ,将 w0 独立出来写作 b 。这样就得到了如下的问题:

Standard Support Vector Regression Primal

SVR Primal

minw,b12wTw+Cn=1Nmax(0,|wTzn+by|ϵ)

变成一个二次规划问题的关键是将 max 变形,为此我们引进了一个新的变量 ξn ξn 记录了真实值和预测值的差值比 ϵ 大多少,且 ξn0

minb,w,ξs.t.12wTw+Cn=1Nξn|wTzn+byn|ϵ+ξnξn0

还不是 QP 问题,因为条件不是线性的,需要去掉绝对值。

minb,w,ξs.t.12wTw+Cn=1N(ξn+ξn)ϵξnynwTznbϵ+ξnξn0,ξn0

现在就得到了一个标准的 QP 问题。我们将这个问题成为称为标准的 Support Vector Regression(SVR) Primal 问题

SVRminimizeregularizer+(upper tube violation ξnand lower tube violations ξn)

SVR Primal 问题如下:

minb,w,ξn,ξns.t.12wTw+Cn=1N(ξn+ξn)ϵξnynwTznbϵ+ξnξn0,ξn0


这里写图片描述

从图中可以看出,就是通过最小化所有的红线长度的和加上规则化因子来得到一条比较好的分割线。

  • 参数 C 用来衡量对误差的重视程度,越大则表明想要更小的误差,与此同时就会带来更大的模型复杂度;C越小相对来说 12wTw 占有的比重就越大,正则化起到的作用就越大,即想要更加简单的模型复杂度。
  • 参数 ϵ 用来决定 tube 的宽度, tube 的宽度是2 ϵ 。所以可以用来调节容忍的程度,越大表明对预测值和真实值的差值有越大的容忍度。

所以 SVR SVM 相比来说多一个可以调节的参数 ϵ
这个二次规划问题的变数有 2N+1+d~ ,约束的个数 2N+2N 个。那么接下来我们关心的问题是怎么把 d~ 的影响移除掉。和 SVM 的做法一样,需要把这个问题转换成一个对偶问题,在转换为一个对偶问题之后,就可以使用 kernel trick 避免在 Z 空间中的运算,也就是说就和Z空间的维度 d~ 没有关系了。

Support Vector Regression Dual

SVR Primal 问题如下:

minb,w,ξn,ξns.t.12wTw+Cn=1N(ξn+ξn)ϵξnynwTznbϵ+ξnξn0,ξn0

现在有了 SVR Primal 形式,接下来我们希望可以得到 SVR Dual 形式。所以我们引入 Lagrange multiplier

  • 针对条件: ynwTznbϵ+ξn ,引入乘子 αn
  • 针对条件: ϵξnynwTznb ,引入乘子 αn

那么接下来就是写出 Lagrange 函数,然后对里面的变量求微分,使用KKT条件对 Lagrange 函数做替换得到一个新的问题,这个新的问题就是我们想要得到的对偶问题。类似于SVM的对偶问题的推导。

这里只给出一些最后推到的结果:

  • 利用 KKT 条件对 wi 进行求导并令结果为0可以得到:
    Lwi=0w=n=1N(αnαn)zn
    这个和在 SVM 得到的结果是一样的, 即 w 会是z的线性组合。
  • 利用 KKT 条件对 b 进行求偏导并令结果为0可以得到:
    Lb=0n=1N(αnαn)=0
  • 利用 KKT 条件得最佳解满足:
    αn(ϵ+ξnyn+wTzn+b)=0,αn(ϵ+ξnyn+wTzn+b)=0

经过推导之后,SVR的对偶形式如下

mins.t.12n=1Nm=1N(αnαn)(αmαm)K(xn,xm)+n=1N((ϵyn)αn+(ϵ+yn)αn)n=1N1(αnαn)=0Cαn0,Cαn0

我们推导 SVR 的最初的目的是为了得到稀疏的解。现在我们就来看看我们有没有达到目的。现在我们已经知道了最佳的解 w 可以表示为 z 的线性组合,那么在什么情况下 βn 0 呢?

w=n=1N(αnαn)βnzn

KKT 条件告诉我们的如下的两个 complementary slackness 出发,

αn(ϵ+ξnyn+wTzn+b)=0,αn(ϵ+ξnyn+wTzn+b)=0

我们考虑严格位于 tube 中的数据点: |wTzn+byn|<ϵ

when|wTzn+byn|<ϵξn=ξn=0ϵ+yn+wTzn+b0,ϵyn+wTzn+b0αn=αn=0βn=0

所以当预测值和真实值的差值的绝对值小于 ϵ ,即位于 tube 之间的时候,这些数据点对于最佳解 w 没有贡献。所以只有在tube外面或者是边界上的点才对 w 有影响的点,也就是support vectors。到这里我们就证明了可以用 SVR 这样的模型得到 sparse 的解。

Summary of Kernel Models

线性模型

本系列中涉及的线性模型主要有三个

  • PLA/pocket 用于分类,直接优化 err0/1
  • Logistic Regression 用于 soft 分类,其方法是最小化 cross entropy error 或者说是 logistic error - errCE ,通常使用 SGD 或者 GD 。如果加上正则化项就是 regularized logistic regression
  • Linear Regression 用于对实数的回归分析,通过最小化 errsquare 可以得到解析解。如果加上正则化项就是 linear ridge regression
  • 之后介绍了另外一种线性模型 linear soft margin SVM ,也是用于解决线性的分类问题,使用的 error function 被称为是 hinge error ,通过求解一个 QP 问题得到最优解。
  • Regression 的另一种做法是 linear SVR ,同样是使用二次规划最小化 errtube


这里写图片描述

LIBLINEAR 中实现了第二行的三种模型。


以上线性的模型只要加上 regularizer 都可以延伸成 kernel 的模型。


这里写图片描述

linear soft margin SVM 延伸成 SVM SVM 解决的不再是 primal 问题,而是对偶问题;
linear SVR kernel 延伸是 SVR ,同样也是解决对偶问题;
通过 representer theorem 可以将 linear ridge regression 变为 kernel ridge regression
可以将 regularized logistic regression 变为 kernel logistic regression
kernel logistic regression 通常会被 Probabilistic SVM ,也就是 two level learning 取代;

LIBSVM 实现了最后一行的所有的三种模型。


针对上图中模型的实用度做简单的记录:第一行 PLA/pocket linear SVR 很少被使用,通常会被它们下面的两个模型分别取代;第三行的 kernel ridge regression kernel logistic regression 也比较少用,因为这两个模型的解不是稀疏的,通常会被它们下面的两个模型分别取代。

总结

本篇主要讲解了 Support Vector Regression ,我们一开始的出发点是如何将 Ridge Regression 变为 kernel 的形式, representer theorem 理论帮助我们完成了这个工作,但是通过这样的方法得到的解不是稀疏的,我们想要的 sparse 的解,所以我们通过推导带有 regularizer tube error 得出了 SVR 的原始问题,进一步推导了 SVR 的对偶问题。最后根据 KTT 条件得到了稀疏的解。

回顾

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐