Support Vector Regression(SVR)
上一篇中的内容是KLR(kernel 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)=(y−wTz)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+1N∑n=1N(yn−wTzn)2w∗=∑n=1Nβnzn(1)
因为已经知道了最佳解的形式,所以我们可以将最佳解带入原始的问题当中,这样就将问题从求解w变为求解β。
minβλN∑n=1N∑m=1NβnβmzTnzm+1N∑n=1N(yn−∑m=1NβmzTmzn)2
这样就可以使用
核技巧得到如下的Kernel Ridge Regression问题: minβλN∑n=1N∑m=1NβnβmK(xn,xm)□+1N∑n=1N(yn−∑m=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的解
- 右边是kernel ridge regression的解
在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,当真实值和预测值的差值不超过这个容忍阈值的时候,就不记录该差值。 结合下图就是说:假设容忍阈值的大小为紫色的宽度,那么所有出现在紫色中的点,虽然真实值和预测值之间存在差距,但是不予计较。
也就是说:
- 如果|s−y|≤ϵ,⟶error=0
- 如果|s−y|>ϵ,⟶error=|s−y|−ϵ
结合以上的讨论得到,如果错的超过了我们的阈值,不计较,此时|s−y|−ϵ<0,即err=0;如果错的超过了我们的阈值,就将err记为超过的部分。
err(y,s)=max(0,|s−y|−ϵ)
这个error通常被称为ϵ insensitive error,形式很像在SVM中的hinge error。这样做也是为了让regression和有sparse解的SVM取得关联。
我们现在要做的事情是,将带有L2 regularized的tube regression进行一系列的推到得到它的稀疏的解β。
Tube和Squared Regression对比
- tube:err(y,s)=max(0,|y−s|−ϵ)
- squared:err(u,s)=(s−y)2
将两种error画在下图中,可以看出,当|y−s|比较小的时候,tube和squared的error其实是很接近的。当|y−s|比较大的时候,squared会上升的比较快,而tube则比较平缓。所以squared更容易受到噪音的影响,相对来说可能tube会好一点。稍后会看到,使用ϵ insensitive error这样的方式会让我们得到稀疏的解。
L2-Regularized Tube Regression
现在我们要求解的是一个带有L2-regularize正则化因子的tube regression问题。
minwλNwTwregularize+1N∑n=1Nmax(0,|wTzn−y|−ϵ)tube error
回想一下soft margin SVM问题的求解过程,SVM问题解决的是L2-Regularize加上margin violation的最小化问题:min12wTw+C∑margin 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+C∑n=1Nmax(0,|wTzn+b−y|−ϵ)
变成一个二次规划问题的关键是将max变形,为此我们引进了一个新的变量ξn,ξn记录了真实值和预测值的差值比ϵ大多少,且ξn≥0。
minb,w,ξs.t.12wTw+C∑n=1Nξn|wTzn+b−yn|≤ϵ+ξnξn≥0
还不是QP问题,因为条件不是线性的,需要去掉绝对值。
minb,w,ξs.t.12wTw+C∑n=1N(ξ∧n+ξ∨n)−ϵ−ξ∨n≤yn−wTzn−b≤ϵ+ξ∧nξ∨n≥0,ξ∨n≥0
现在就得到了一个标准的QP问题。我们将这个问题成为称为标准的Support Vector Regression(SVR)的Primal问题。
SVR:minimizeregularizer+(upper tube violation ξ∧nand lower tube violations ξ∨n)
SVR的Primal问题如下:
minb,w,ξ∨n,ξ∧ns.t.12wTw+C∑n=1N(ξ∧n+ξ∨n)−ϵ−ξ∨n≤yn−wTzn−b≤ϵ+ξ∧nξ∨n≥0,ξ∨n≥0
从图中可以看出,就是通过最小化所有的红线长度的和加上规则化因子来得到一条比较好的分割线。
- 参数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+C∑n=1N(ξ∧n+ξ∨n)−ϵ−ξ∨n≤yn−wTzn−b≤ϵ+ξ∧nξ∨n≥0,ξ∨n≥0
现在有了SVR的Primal形式,接下来我们希望可以得到SVR的Dual形式。所以我们引入Lagrange multiplier,
- 针对条件:yn−wTzn−b≤ϵ+ξ∧n,引入乘子α∧n;
- 针对条件:−ϵ−ξ∨n≤yn−wTzn−b,引入乘子α∨n。
那么接下来就是写出Lagrange函数,然后对里面的变量求微分,使用KKT条件对Lagrange函数做替换得到一个新的问题,这个新的问题就是我们想要得到的对偶问题。类似于SVM的对偶问题的推导。
这里只给出一些最后推到的结果:
经过推导之后,SVR的对偶形式如下:
mins.t.12∑n=1N∑m=1N(α∧n−α∨n)(α∧m−α∨m)K(xn,xm)+∑n=1N((ϵ−yn)⋅α∧n+(ϵ+yn)⋅α∨n)∑n=1N1⋅(α∧n−α∨n)=0C≥α∧n≥0,C≥α∨n≥0
我们推导SVR的最初的目的是为了得到稀疏的解。现在我们就来看看我们有没有达到目的。现在我们已经知道了最佳的解w可以表示为 z 的线性组合,那么在什么情况下βn是 0 呢?
w=∑n=1N(α∧n−α∨n)βnzn
从KKT条件告诉我们的如下的两个complementary slackness出发,
α∧n(ϵ+ξ∨n−yn+wTzn+b)=0,α∧n(ϵ+ξ∨n−yn+wTzn+b)=0
我们考虑严格位于tube中的数据点:|wTzn+b−yn|<ϵ
when|wTzn+b−yn|<ϵ⟶ξ∨n=ξ∧n=0⟶ϵ+yn+wTzn+b≠0,ϵ−yn+wTzn+b≠0⟶α∨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条件得到了稀疏的解。
回顾
- SVM学习笔记-线性支撑向量机
- SVM学习笔记-对偶形式的SVM
- SVM学习笔记-核函数与非线性SVM
- SVM学习笔记-软间隔SVM
- Kernel Logistic Regression
- Support Vector Regression(SVR)