支持向量回归模型SVR

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

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

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

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

    但是我们现在是回归模型,优化目标函数可以继续和SVM分类模型保持一致为 12||w||22 12||w||22,但是约束条件呢?不可能是让各个训练集中的点尽量远离自己类别一边的的支持向量,因为我们是回归模型,没有类别。对于回归模型,我们的目标是让训练集中的每个点 (xi,yi) (xi,yi),尽量拟合到一个线性模型 yi =w∙ϕ(xi)+b yi =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)−b≠0 yi−w∙ϕ(xi)−b≠0,那么就会有损失。

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

支持向量回归模型SVR

    总结下,我们的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)加入松弛变量 ξi≥0 ξi≥0, 但是由于我们这里用的是绝对值,实际上是两个不等式,也就是说两边都需要松弛变量,我们定义为 ξ∨i,ξ∧i ξi∨,ξi∧, 则我们SVM回归模型的损失函数度量在加入松弛变量之后变为:

min12||w||22+C∑i=1m(ξ∨i+ξ∧i) min12||w||22+C∑i=1m(ξi∨+ξi∧)

s.t.−ϵ−ξ∨i≤yi−w∙ϕ(xi)−b≤ϵ+ξ∧i s.t.−ϵ−ξi∨≤yi−w∙ϕ(xi)−b≤ϵ+ξi∧

ξ∨i≥0,ξ∧i≥0(i=1,2,...,m) ξi∨≥0,ξi∧≥0(i=1,2,…,m)

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

L(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 L(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,α∨i≥0,α∧i≥0 μ∨≥0,μ∧≥0,αi∨≥0,αi∧≥0,均为拉格朗日系数。

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

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

minw,b,ξ∨i,ξ∧imaxμ∨≥0,μ∧≥0,α∨i≥0,α∧i≥0L(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,α∨i≥0,α∧i≥0min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,ξ∧i w,b,ξi∨,ξi∧的极小值, 接着再求拉格朗日乘子 α∨,α∧,μ∨,μ∧ α∨,α∧,μ∨,μ∧的极大值。

    首先我们来求优化函数对于 w,b,ξ∨i,ξ∧i w,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,ξ∧i w,b,ξi∨,ξi∧了。

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

maxα∨,α∧∑i=1m(ϵ−yi)α∧i+(ϵ+yi)α∨i)−12∑i=1,j=1m(α∧i−α∨i)(α∧j−α∨j)Kij max⏟α∨,α∧∑i=1m(ϵ−yi)αi∧+(ϵ+yi)αi∨)−12∑i=1,j=1m(αi∧−αi∨)(αj∧−αj∨)Kij

s.t.∑i=1m(α∧i−α∨i)=0 s.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α∨,α∧12∑i=1,j=1m(α∧i−α∨i)(α∧j−α∨j)Kij−∑i=1m(ϵ−yi)α∧i+(ϵ+yi)α∨i min⏟α∨,α∧12∑i=1,j=1m(αi∧−αi∨)(αj∧−αj∨)Kij−∑i=1m(ϵ−yi)αi∧+(ϵ+yi)αi∨

s.t.∑i=1m(α∧i−α∨i)=0 s.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,b w,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)−b≠0,ϵ+ξ∧i−yi+w∙ϕ(xi)+b≠0 ϵ+ξ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∨

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

5. SVM 算法小结

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

    SVM算法的主要优点有:

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

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

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

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

    SVM算法的主要缺点有:

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

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

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

    4)SVM对缺失数据敏感。

   

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

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 托马斯微积分什么时候学_普林斯顿微积分好在哪

    托马斯微积分什么时候学_普林斯顿微积分好在哪托马斯微积分和微积分学教程Samewithlinearalgebra,calculusisalsocloselyrelatedtoprogramming.与线性代数一样,微积分也与编程紧密相关。Youmightknowthefirsttwocoursesinthefirstgradeofcomputerscienceandengineerin…

    2022年10月25日
  • 宽字节注入讲解

    宽字节注入讲解我讨厌现在的自己,一边压抑着自己的情绪,一边装作没事的样子,一到深夜就彻底崩溃了,天亮后还要微笑面对生活。。。—-网易云热评一、原理1、单字节字符集:所有的字符都使用一个字节来表示,比如ASCII编码(0-127)2、多字节字符集:在多字节字符集中,一部分字节用多个字节来表示,另一部分(可能没有)用单个字节来表示。3、宽字节注入是利用mysql的一个特性,使用GBK编码的时候,会认为两个字符是一个汉字二、addslashes()函数1、addslashes(..

    2022年10月14日
  • 五表权限_表格设置查看权限和编辑权限

    五表权限_表格设置查看权限和编辑权限设计基础:用户、角色、权限三大核心表,加上用户角色、角色权限两个映射表(用于给用户表联系上权限表)。这样就可以通过登录的用户来获取权限列表,或判断是否拥有某个权限。大致用到5张表:用户表(UserInfo)、角色表(RoleInfo)、菜单表(MenuInfo)、用户角色表(UserRole)、角色菜单表(RoleMenu)。各表的大体表结构如下:1、用户表(UserInfo):Id、Use…

    2022年9月29日
  • BoundsChecker 使用方法[通俗易懂]

    1前言我在本文中详细介绍了测试工具NuMegaDevpartner(以下简称NuMega)的使用方法。NuMega是一个动态测试工具,主要应用于白盒测试。该工具的特点是学习简单、使用方便、功能有效。NuMega共有三个独立的子功能——BoundsChecker、TrueCoverage、TrueTime。BoundsChecker为代码检错工具,TrueCoverage为测试覆盖率统计…

    2022年4月8日
  • gcc编译链中i686和x86-64有什么区别?

    gcc编译链中i686和x86-64有什么区别?个人记录,请不要当成事实!!暂时理解成:来自网络1、i686和x86_64有什么不同?2、linux系统中的i386/i686和x86_64有什么区别回答i386对应的是32位系统、而i686是i386的一个子集,i686仅对应P6及以上级别的CPU,i386则广泛适用于80386以上的各种CPU;x86_64主要是64位系统。i686在pentun…

    2022年6月7日
  • .deb文件如何安装,Ubuntu下deb安装方法图文详解[通俗易懂]

    .deb文件如何安装,Ubuntu下deb安装方法图文详解[通俗易懂]摘自:https://www.linuxidc.com/Linux/2018-11/155380.htmdeb包是Debian,Ubuntu等Linux发行版的软件安装包,扩展名为.deb,是类似于rpm的软件包,Debian,Ubuntu系统不推荐使用deb软件包,因为要解决软件包依赖问题,安装也比较麻烦。如果Ubuntu要安装新软件,已有deb安装包(例如:linux…

    2022年6月4日

发表回复

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

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