首页 > 代码库 > 支持向量机原理(五)线性支持回归

支持向量机原理(五)线性支持回归

   支持向量机原理(一) 线性支持向量机

    支持向量机原理(二) 线性支持向量机的软间隔最大化模型

    支持向量机原理(三)线性不可分支持向量机与核函数

    支持向量机原理(四)SMO算法原理

    支持向量机原理(五)线性支持回归

    在前四篇里面我们讲到了SVM的线性分类和非线性分类,以及在分类时用到的算法。这些都关注与SVM的分类问题。实际上SVM也可以用于回归模型,本篇就对如何将SVM用于回归模型做一个总结。重点关注SVM分类和SVM回归的相同点与不同点。

1. SVM回归模型的损失函数度量

    回顾下我们前面SVM分类模型中,我们的目标函数是让12||w||2212||w||22最小,同时让各个训练集中的点尽量远离自己类别一边的的支持向量,即yi(w??(xi)+b)1yi(w??(xi)+b)≥1。如果是加入一个松弛变量ξi0ξi≥0,则目标函数是12||w||22+Ci=1mξi12||w||22+C∑i=1mξi,对应的约束条件变成:yi(w??(xi)+b)1?ξiyi(w??(xi)+b)≥1?ξi

    但是我们现在是回归模型,优化目标函数可以继续和SVM分类模型保持一致为12||w||2212||w||22,但是约束条件呢?不可能是让各个训练集中的点尽量远离自己类别一边的的支持向量,因为我们是回归模型,没有类别。对于回归模型,我们的目标是让训练集中的每个点(xi,yi)(xi,yi),尽量拟合到一个线性模型yi =w??(xi)+byi =w??(xi)+b。对于一般的回归模型,我们是用均方差作为损失函数,但是SVM不是这样定义损失函数的。

    SVM需要我们定义一个常量?>0?>0,对于某一个点(xi,yi)(xi,yi),如果|yi?w??(xi)?b|?|yi?w??(xi)?b|≤?,则完全没有损失,如果|yi?w??(xi)?b|>?|yi?w??(xi)?b|>?,则对应的损失为|yi?w??(xi)?b|??|yi?w??(xi)?b|??,这个均方差损失函数不同,如果是均方差,那么只要yi?w??(xi)?b0yi?w??(xi)?b≠0,那么就会有损失。

    如下图所示,在蓝色条带里面的点都是没有损失的,但是外面的点的是有损失的,损失大小为红色线的长度。

技术分享

    总结下,我们的SVM回归模型的损失函数度量为:

 

err(xi,yi)={0|yi?w??(xi)+b|??|yi?w??(xi)?b|?|yi?w??(xi)?b|>?err(xi,yi)={0|yi?w??(xi)?b|≤?|yi?w??(xi)+b|??|yi?w??(xi)?b|>?

 

2. SVM回归模型的目标函数的原始形式

    上一节我们已经得到了我们的损失函数的度量,现在可以可以定义我们的目标函数如下:

min12||w||22s.t|yi?w??(xi)?b|?(i=1,2,...m)min12||w||22s.t|yi?w??(xi)?b|≤?(i=1,2,...m)

 

    和SVM分类模型相似,回归模型也可以对每个样本(xi,yi)(xi,yi)加入松弛变量ξi0ξi≥0, 但是由于我们这里用的是绝对值,实际上是两个不等式,也就是说两边都需要松弛变量,我们定义为ξi,ξiξi∨,ξi∧, 则我们SVM回归模型的损失函数度量在加入松弛变量之后变为:

min12||w||22+Ci=1m(ξi+ξi)min12||w||22+C∑i=1m(ξi∨+ξi∧)
s.t.???ξiyi?w??(xi)?b?+ξis.t.???ξi∨≤yi?w??(xi)?b≤?+ξi∧
ξi0,ξi0(i=1,2,...,m)ξi∨≥0,ξi∧≥0(i=1,2,...,m)

 

    依然和SVM分类模型相似,我们可以用拉格朗日函数将目标优化函数变成无约束的形式,也就是拉格朗日函数的原始形式如下:

 

L(w,b,α,α,ξi,ξi,μ,μ)=12||w||22+Ci=1m(ξi+ξi)+i=1mα(???ξi?yi+w??(xi)+b)+i=1mα(yi?w??(xi)?b???ξi)?i=1mμξi?i=1mμξiL(w,b,α∨,α∧,ξi∨,ξi∧,μ∨,μ∧)=12||w||22+C∑i=1m(ξi∨+ξi∧)+∑i=1mα∨(???ξi∨?yi+w??(xi)+b)+∑i=1mα∧(yi?w??(xi)?b???ξi∧)?∑i=1mμ∨ξi∨?∑i=1mμ∧ξi∧

 

    其中 μ0,μ0,αi0,αi0μ∨≥0,μ∧≥0,αi∨≥0,αi∧≥0,均为拉格朗日系数。

3. SVM回归模型的目标函数的对偶形式

    上一节我们讲到了SVM回归模型的目标函数的原始形式,我们的目标是

minw,b,ξi,ξimaxμ0,μ0,αi0,αi0L(w,b,α,α,ξi,ξi,μ,μ)min?w,b,ξi∨,ξi∧max?μ∨≥0,μ∧≥0,αi∨≥0,αi∧≥0L(w,b,α∨,α∧,ξi∨,ξi∧,μ∨,μ∧)

 

    和SVM分类模型一样,这个优化目标也满足KKT条件,也就是说,我们可以通过拉格朗日对偶将我们的优化问题转化为等价的对偶问题来求解如下:

maxμ0,μ0,αi0,αi0minw,b,ξi,ξiL(w,b,α,α,ξi,ξi,μ,μ)max?μ∨≥0,μ∧≥0,αi∨≥0,αi∧≥0min?w,b,ξi∨,ξi∧L(w,b,α∨,α∧,ξi∨,ξi∧,μ∨,μ∧)

 

    我们可以先求优化函数对于w,b,ξi,ξiw,b,ξi∨,ξi∧的极小值, 接着再求拉格朗日乘子α,α,μ,μα∨,α∧,μ∨,μ∧的极大值。

    首先我们来求优化函数对于w,b,ξi,ξiw,b,ξi∨,ξi∧的极小值,这个可以通过求偏导数求得:

?L?w=0?w=i=1m(αi?αi)?(xi)?L?w=0?w=∑i=1m(αi∧?αi∨)?(xi)
?L?b=0?i=1m(αi?αi)=0?L?b=0?∑i=1m(αi∧?αi∨)=0
?L?ξi=0?C?α?μ=0?L?ξi∨=0?C?α∨?μ∨=0
?L?ξi=0?C?α?μ=0?L?ξi∧=0?C?α∧?μ∧=0

 

 

    好了,我们可以把上面4个式子带入L(w,b,α,α,ξi,ξi,μ,μ)L(w,b,α∨,α∧,ξi∨,ξi∧,μ∨,μ∧)去消去w,b,ξi,ξiw,b,ξi∨,ξi∧了。

    看似很复杂,其实消除过程和系列第一篇第二篇文章类似,由于式子实在是冗长,这里我就不写出推导过程了,最终得到的对偶形式为:

maxα,αi=1m(??yi)αi+(?+yi)αi)?12i=1,j=1m(αi?αi)(αj?αj)Kijmax?α∨,α∧∑i=1m(??yi)αi∧+(?+yi)αi∨)?12∑i=1,j=1m(αi∧?αi∨)(αj∧?αj∨)Kij
s.t.i=1m(αi?αi)=0s.t.∑i=1m(αi∧?αi∨)=0
0<αi<C(i=1,2,...m)0<αi∨<C(i=1,2,...m)
0<αi<C(i=1,2,...m)0<αi∧<C(i=1,2,...m)

 

 

     对目标函数取负号,求最小值可以得到和SVM分类模型类似的求极小值的目标函数如下:

minα,α12i=1,j=1m(αi?αi)(αj?αj)Kij?i=1m(??yi)αi+(?+yi)αimin?α∨,α∧12∑i=1,j=1m(αi∧?αi∨)(αj∧?αj∨)Kij?∑i=1m(??yi)αi∧+(?+yi)αi∨
s.t.i=1m(αi?αi)=0s.t.∑i=1m(αi∧?αi∨)=0
0<αi<C(i=1,2,...m)0<αi∨<C(i=1,2,...m)
0<αi<C(i=1,2,...m)0<αi∧<C(i=1,2,...m)

 

    对于这个目标函数,我们依然可以用第四篇讲到的SMO算法来求出对应的α,αα∨,α∧,进而求出我们的回归模型系数w,bw,b。

4. SVM回归模型系数的稀疏性

    在SVM分类模型中,我们的KKT条件的对偶互补条件为: α?i(yi(w??(xi)+b)?1)=0αi?(yi(w??(xi)+b)?1)=0,而在回归模型中,我们的对偶互补条件类似如下:

αi(?+ξi+yi?w??(xi)?b)=0αi∨(?+ξi∨+yi?w??(xi)?b)=0
αi(?+ξi?yi+w??(xi)+b)=0αi∧(?+ξi∧?yi+w??(xi)+b)=0

 

    根据松弛变量定义条件,如果|yi?w??(xi)?b|<?|yi?w??(xi)?b|<?,我们有ξi=0,ξi=0ξi∨=0,ξi∧=0,此时?+ξi+yi?w??(xi)?b0,?+ξi?yi+w??(xi)+b0?+ξi∨+yi?w??(xi)?b≠0,?+ξi∧?yi+w??(xi)+b≠0这样要满足对偶互补条件,只有αi=0,αi=0αi∨=0,αi∧=0。

    我们定义样本系数系数

βi=αi?αiβi=αi∧?αi∨

 

    根据上面ww的计算式w=i=1m(αi?αi)?(xi)w=∑i=1m(αi∧?αi∨)?(xi),我们发现此时βi=0βi=0,也就是说ww不受这些在误差范围内的点的影响。对于在边界上或者在边界外的点,αi0,αi0αi∨≠0,αi∧≠0,此时βi0βi≠0。

5. SVM 算法小结

    这个系列终于写完了,这里按惯例SVM 算法做一个总结。SVM算法是一个很优秀的算法,在集成学习和神经网络之类的算法没有表现出优越性能前,SVM基本占据了分类模型的统治地位。目前则是在大数据时代的大样本背景下,SVM由于其在大样本时超级大的计算量,热度有所下降,但是仍然是一个常用的机器学习算法。

    SVM算法的主要优点有:

    1) 解决高维特征的分类问题和回归问题很有效,在特征维度大于样本数时依然有很好的效果。

    2) 仅仅使用一部分支持向量来做超平面的决策,无需依赖全部数据。

    3) 有大量的核函数可以使用,从而可以很灵活的来解决各种非线性的分类回归问题。

    4)样本量不是海量数据的时候,分类准确率高,泛化能力强。

    SVM算法的主要缺点有:

    1) 如果特征维度远远大于样本数,则SVM表现一般。

    2) SVM在样本量非常大,核函数映射维度非常高时,计算量过大,不太适合使用。

    3)非线性问题的核函数的选择没有通用标准,难以选择一个合适的核函数。

    4)SVM对缺失数据敏感。

    之后会对scikit-learn中SVM的分类算法库和回归算法库做一个总结,重点讲述调参要点,敬请期待。

支持向量机原理(五)线性支持回归