SVM——支持向量回归(SVR)[通俗易懂]

SVM——支持向量回归(SVR)[通俗易懂]1、支持向量回归的原始问题先来看看SVM线性支持向量机(软间隔)的原始问题:其中ξi是松弛变量,但它实际上是hinge(合页)损失函数,所以ξi也作为对应的点(xi,yi)的损失,如下图所示:当点(xi,yi)位于间隔面上或者间隔面之外(这两种都是正确分类的情况)则ξi=0,若点(xi,yi)位于分割面上或者正确分类且位于间隔面之内或者位于分错的那一侧,这三种情况都是有损失的,损失…

大家好,又见面了,我是你们的朋友全栈君。

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对应的点就是我们支持向量。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143727.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月20日 下午10:40
下一篇 2022年5月20日 下午11:00


相关推荐

  • 09-wtm功能菜单管理

    09-wtm功能菜单管理frameworkmen GUID 主键 页面名称 动作名称 模块名称 是否是目录 是否继承 类名称 方法名称 domain 是否显示在菜单上 是否是公开的 显示顺序 是否是内联 URL 图标 上级菜单页面 添加内部地址 添加目录 添加实际目录 功能权限表 functionpriv GUID 主键 角色编码 菜单项 id 是否允许访问 用于结合菜单表实现菜

    2026年3月18日
    3
  • typedef struct Lnode{ Elemtype data; struct Lnode *next; } Lnode,*Linklist;「建议收藏」

    typedef struct Lnode{ Elemtype data; struct Lnode *next; } Lnode,*Linklist;「建议收藏」*next是指向下一个值的地址而*Linklist是当前这个值的地址,只是这个值里有数据data,和下一个值的地址就是说链表中,因为数据是随机储存的,所以地址不是连续的,要想读取下一个数,就要知道下一个数据的地址不知道有没有看懂,表达能力不是很好*Linklist相当于一个数组头指针,只是这个数组的元素是结构体*next则是构成链表的一个基本元素,指向该结点下一个结点的地址从某种意义上讲,*Linklist是指定了这段空间在内存中的位置(可以申请连续的结点空间),而*next则对结点进行了一

    2022年5月19日
    45
  • 时间格式时间戳转换

    时间格式时间戳转换

    2021年9月13日
    52
  • 指针常量和常量指针区别

    指针常量和常量指针区别1 指针常量 指针类型的常量 int constp 本质上一个常量 指针用来说明常量的类型 表示该常量是一个指针类型的常量 在指针常量中 指针自身的值是一个常量 不可改变 始终指向同一个地址 在定义的同时必须初始化 用法如下 inta 10 b 20 int constp amp a p 30 p 指向的地址是一定的 但其内容可以修改 2 常量指针 指向 常量 的指针 constint p intconst p 常量指针本质上是一个指

    2026年3月26日
    2
  • elasticsearch

    elasticsearch

    2021年5月28日
    145
  • navicat premium 15 mac 激活码【2021.8最新】

    (navicat premium 15 mac 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsa…

    2022年3月25日
    73

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号