机器学习笔记-Support Vector Regression(SVR)

来源:互联网 发布:淘宝卖家改评价链接 编辑:程序博客网 时间:2024/06/14 13:57

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

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

线性回归

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

err(y,wTz)=(ywTz)2

如果在线性回归的基础上加上regularization的话得到的模型我们称之为ridge regression,即有regularizationlinearregression的形式。这节将讲述的是,怎么把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将所有zz的乘积换成是Kernel的形式。这样就得到了Kernel Ridge Regression
可以将kernel ridge regression看做是β的线性模型,其中β的复杂度有关;则是β的线性组合,组合的项是经过kernel转换之后的特征。所以β的一个regularizererror的部分。

化简为矩阵的形式:

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 regressionZ空间中的解。

所以理论上,我们现在可以很轻易的做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用于classificationkernel ridge regression有一个特别的名字叫做least squares SVM(LSSVM)least squares在强调的是,它所使用的是errorsquare error

对同样的资料分别利用使用soft margin Gaussian SVMGaussian 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 regressionkernel 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 regularizedtube regression进行一系列的推到得到它的稀疏的解β

Tube和Squared Regression对比

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

将两种error画在下图中,可以看出,|ys|比较小的时候,tubesquarederror其实是很接近的。当|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)

SVRPrimal问题如下:

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


这里写图片描述

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

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

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

Support Vector Regression Dual

SVRPrimal问题如下:

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

现在有了SVRPrimal形式,接下来我们希望可以得到SVRDual形式。所以我们引入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 的线性组合,那么在什么情况下βn0 呢?

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延伸成SVMSVM解决的不再是primal问题,而是对偶问题;
linear SVRkernel延伸是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/pocketlinear SVR很少被使用,通常会被它们下面的两个模型分别取代;第三行的kernel ridge regressionkernel logistic regression也比较少用,因为这两个模型的解不是稀疏的,通常会被它们下面的两个模型分别取代。

总结

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

回顾

  • SVM学习笔记-线性支撑向量机
  • SVM学习笔记-对偶形式的SVM
  • SVM学习笔记-核函数与非线性SVM
  • SVM学习笔记-软间隔SVM
  • Kernel Logistic Regression
  • Support Vector Regression(SVR)
阅读全文
0 0
原创粉丝点击