大家好,又见面了,我是你们的朋友全栈君。
1、支持向量回归的原始问题
先来看看SVM线性支持向量机(软间隔)的原始问题:
其中ξi是松弛变量,但它实际上是hinge(合页)损失函数,所以ξi也作为对应的点(xi, yi)的损失,如下图所示:
当点(xi, yi)位于间隔面上或者间隔面之外(这两种都是正确分类的情况)则ξi=0,若点(xi, yi)位于分割面上或者位于间隔面与分割面之间(正确分类)或者位于间隔面与分割面之间(错误分类),这三种情况都是有损失的,损失为 1 – yi(w·xi + b)。
SVM线性支持向量机(软间隔)的原始问题等价于如下问题:
好了现在来看SVR的原始问题:
如上图所示,SVR需要学到一个最大间隔(几何间隔)的回归面或回归线,ε代表精度,在2ε间隔之内的点和间隔面上的点离回归面最近,所以认为这些点的预测结果比较可靠,是没有损失的,而2ε间隔之外的点离回归面较远,所以认为这些点的预测结果不太可靠,是有损失的。而敏感度损失函数刚好就能用来计算每个点的损失,如下图所示:
其中w·xi+b代表预测值,yi是实际值,|w·xi+b – yi|表示误差绝对值,如果点(xi, yi)的预测误差绝对值小于等于ε,则ξi=0,ξi代表损失;如果点(xi, yi)的预测误差绝对值大于ε,则ξi= |w·xi+b – yi| – ε。
综上所述得出SVR的原始约束问题:
其中约束条件的意义就是让所有的点(xi, yi)都满足敏感度损失函数,也就是让 ξi 能足够代替点(xi, yI)的损失,因为ξi 始终大于等于该点的预测误差绝对值减去ε。
SVR目标表达式的解释:
这里附上一点自己的理解,不对的地方欢迎指证。将上述SVR的目标表达式分两部分来分析,先看后半部分的惩罚项,它的最小化使得训练集中绝大多数的点都位于精度为|ε|的间隔面内;再来看前半部分的1/2||w||2 ,它的最小化是为了几何间隔最大化,而几何间隔最大化保证了间隔面内的绝大部分y为正的点会预测为正的,y为负的点会预测为负的。综上所述,惩罚项控制预测的精度,几何间隔控制预测的正负号,所以该目标表达式最小化的解w*和b*将是最优的回归线。
根据硬间隔SVM和软间隔SVM的知识,我们知道SVM的原始问题最终都转换为求其对偶问题,所以SVR也不例外。因为SVR原始问题的不等式约束不是凸函数,所以该不等式约束需要转换一下,如下:
|w·xi+b – yi| – ε <= ξi 等价于 -ε – ξi <= w·xi+b – yi <= ε + ξi ,其中 -ε – ξi <= w·xi+b – yi 即 yi – w·xi+b <= ε + ξi 代表上图中回归面(蓝色线)的下方区域,当点(xi, yi)位于回归面和下间隔面之间时,ξi =0,当点(xi, yi)位于下间隔面下方时ξi>0,这时 ξi 就代表回归面下方区域中的点的损失,我们可以用ξiv来代替它。同理-ε – ξi <= w·xi+b – yi <= ε + ξi 中的右侧部分 w·xi+b – yi <= ε + ξi就可以看作上图中回归面(蓝色线)的上方区域,当点(xi, yi)位于回归面和上间隔面之间时,ξi =0,当点(xi, yi)位于上间隔面上方时ξi>0,这时 ξi 就代表回归面上方区域中的点的损失,我们可以用ξi^ 来代替它。
令f(xi) = w·xi+b,我们最终得到SVR的原始问题如下:
2、支持向量回归的对偶问题
先求原始问题的拉格朗日函数,再对拉格朗日函数求极大(对拉格朗日乘子)极小(对模型参数)问题就得到对偶问题。过程如下:
拉格朗日函数:
对拉格朗日函数求极大极小问题:
(1)先对拉格朗日函数求极小(对模型参数)
分别令L(w, b, αv, α^ , ξv , ξ^ , μv, μ^ ) 对w, b, ξv , ξ^的倒数等于0得:
其中Φ(xi)指的是xi向量。
将上面式子带入拉格朗日函数中消去w, b, ξv , ξ^得:
(2)再对(1)中得到的式子求极大(对拉格朗日乘子)
约束条件是:
其中αiv >=0,μiv >=0,αi^ >=0,μi^ >=0,由αiv= C – μiv 得 0 <= αiv <= C,同理得 0 <= αi^ <= C。
所以支持向量回归的原始问题对应的对偶问题如下:
再将对偶问题的目标表达式转换成求极小,就得到最终的对偶问题如下:
对偶问题的求解即求出αiv 和 αi^ 可以用SMO算法,这里不再讲了。
3、支持向量
支持向量可以说是代表了SVM模型的稀疏性,对于SVR同样有支持向量。
硬间隔线性可分支持向量机的支持向量是间隔面上的点;
软间隔线性支持向量机的支持向量是间隔面上的点、间隔面内被正确分类的点、分割面上的点以及所有被分错的点的集合;
支持向量回归的支持向量则是间隔面之外的点也就是(αiv – αi^) != 0的点。
(不想看分析过程的可以这么理解,因为支持向量回归必然要使得训练数据集中大部分的点都位于回归线附近,即位于间隔面之内(包括间隔面上),所以只允许小部分的点(预测误差较大)位于间隔面之外,支持向量本来就是数据集中的一小部分点,所以位于间隔面之外的点就是支持向量)
分析过程如下:
要使得(w* , b* , ξv*, ξ^* , αiv* , αi^* , μiv* , μi^ *)这一组解满足(w* , b* , ξv*, ξ^*)是原始问题的最优解且(αiv* , αi^* , μiv* , μi^ *)是对偶问题的最优解,则必须满足以下KKT条件:
由(3)(4)(9)(10)可得:
因为位于间隔面之内的点(包括间隔面)满足 ξv* = ξ^* = 0,位于下间隔面下方的点满足ξ^* = 0, ξv* != 0 ;位于上间隔面上方的点满足 ξv* =0,ξ^* != 0,;综上所述ξv* , ξ^* 至少有一个为0,所以ξv* ξ^*=0
当ξv* = ξ^* = 0时:
假设αiv* 和 αi^* 都不为0,由(5)和(6)可得,f(xi) – yi – ε = 0, yi – f(xi) – ε = 0,两式相加,所以ε=0。由题设可知ε是精度(>0),不可能为0,故矛盾,所以假设错误,则可得αiv* 和 αi^* 中至少有一个为0。
当ξv* =0, ξ^* != 0时:
假设αiv* 和 αi^* 都不为0,由(5)和(6)可得,f(xi) – yi – ε = 0, yi – f(xi) – ε – ξ^* = 0,两式相加,所以 ξ^* = -2ε。由题设可知ξ^* 是大于等于0的,而这里ξ^*小于0,故矛盾,所以假设错误,则可得αiv* 和 αi^* 中至少有一个为0。
当ξv* !=0, ξ^* = 0时:
同理可得,αiv* 和 αi^* 中至少有一个为0。
综上所述,αiv* 和 αi^* 中至少有一个为0,所以αiv* αi^* = 0。
整理上述过程推导的一些条件,可得如下部分KKT条件:
因为αiv* 和 αi^* 中至少有一个为0,如果αiv* = αi^*,则必有αiv* = αi^* = 0,由(d)可知必有ξv* = ξ^* = 0,所以αiv* = αi^*对应的点位于间隔面之内(包括间隔面上)。
那么αiv* != αi^*,即(αiv* – αi^*) !=0对应的点位于间隔面之外,所以(αiv* – αi^*) !=0对应的点就是我们支持向量。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/143727.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...