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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 十字路口plc交通灯程序_十字路口红绿灯plc编程实训

    十字路口plc交通灯程序_十字路口红绿灯plc编程实训知识点和关键字:定时器触点比较指令传送指令变址应用数据块控制要求示意图时序图工艺流程图当该路口是红灯时,另外一个路口是通行时间,绿灯亮和黄灯闪亮;当另外一个路口转红灯时,该路口成为通行时间,绿灯亮和黄灯闪亮。程序控制1十字路口交通灯控制程序1,使用了一个定时器来控制,该定时器在一个动作周期内,从0开始随着时间经过逐步增大一直到140,使用定时器过程值来控制红绿灯,如图…

    2025年10月21日
    3
  • 关于使用冒泡法_用冒泡法对5个数排序

    关于使用冒泡法_用冒泡法对5个数排序关于使用冒泡法publicclassMain{publicstaticvoidmain(Stringargs[]){intscore[]={89,-23,64,91,119,52,73};Mainm=newMain();m.printScore(score);}public

    2022年10月10日
    3
  • LOAM, ALOAM, LegoLOAM, hdl graph slam比较

    LOAM, ALOAM, LegoLOAM, hdl graph slam比较A-LOAMLOAM:•LOAMuseanewdefinedfeaturesystem(cornerandflatpoint),forthedetailseeitsarticle.•LOAMsupposelinearmotionwithinthescanswap(VLOAMfurtherusesvisualodometrytoe…

    2025年6月15日
    2
  • linux命令之pstack[通俗易懂]

    linux命令之pstack[通俗易懂]很多时候我们想知道在Linux下后台程序到底运行到哪里了,卡住了吗,出错了吗,最简单的我们会使用#psauxf|grep来查看后台程序的状态,可是如果想知道的更多,那就可以用到pstack这个命令了。首先举一个简单的例子(test.c)来引出这个命令 #include#include#includevoid*thread_proc(void*data)

    2025年11月18日
    3
  • C语言scanf函数以及缓存详解

    C语言scanf函数以及缓存详解前言自学到 C 语言 scanf printf getchar gets 的时候 我觉得这个几个函数并没有什么特别的难得 但是后来写程序的时候却出现了一些小错误总是解决不了 上网查了查 是对于 C 语言缓存的不理解 所以今天本篇博文就集中炮火 用我自己的理解 对这块知识进行一个剖析 本博文中有一些知识点我个人认为还是不成熟 我也没找到能让我信服的知识 如有大神指点迷津 欢迎在评论区留言

    2025年10月5日
    2
  • java file文件删除_Java File.delete 删除文件

    java file文件删除_Java File.delete 删除文件首页>基础教程>IO流>File类JavaFile.delete删除文件Java中File.delete删除当前文件或者文件夹,如果删除的是文件夹,则该文件必须为空,如果要删除一个非空的文件夹,则需要首先删除该文件夹下面每个文件和文件夹,才可以删除。定义publicbooleandelete()返回当且仅当成功删除文件或目录时,返回true;否则返回false…

    2022年5月18日
    29

发表回复

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

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