SVM(二)从拉格朗日对偶问题到SVM

2024-06-12 15:18
文章标签 问题 拉格朗 对偶 svm

本文主要是介绍SVM(二)从拉格朗日对偶问题到SVM,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2.1 拉格朗日对偶(Lagrange duality)

     先抛开上面的二次规划问题,先来看看存在等式约束的极值问题求法,比如下面的最优化问题:

    clip_image001[9]    

    目标函数是f(w),下面是等式约束。通常解法是引入拉格朗日算子,这里使用clip_image003[14]来表示算子,得到拉格朗日公式为

    clip_image004[6]    

    L是等式约束的个数。

    然后分别对w和clip_image003[15]求偏导,使得偏导数等于0,然后解出w和clip_image006[6]。至于为什么引入拉格朗日算子可以求出极值,原因是f(w)的dw变化方向受其他不等式的约束,dw的变化方向与f(w)的梯度垂直时才能获得极值,而且在极值处,f(w)的梯度与其他等式梯度的线性组合平行,因此他们之间存在线性关系。(参考《最优化与KKT条件》)

然后我们探讨有不等式约束的极值问题求法,问题如下:

    clip_image007[6]    

    我们定义一般化的拉格朗日公式

clip_image008[6]

    这里的clip_image010[50]clip_image012[14]都是拉格朗日算子。如果按这个公式求解,会出现问题,因为我们求解的是最小值,而这里的clip_image014[6]已经不是0了,若将clip_image010[51]调整成很大的正值,最后的函数结果是负无穷。因此我们需要排除这种情况,我们定义下面的函数:

    clip_image015[6]

    这里的P代表primal。假设clip_image017[6]或者clip_image019[6],那么我们总是可以调整clip_image010[52]clip_image012[15]来使得clip_image021[10]有最大值为正无穷。而只有g和h满足约束时,clip_image021[11]为f(w)。这个函数的精妙之处在于clip_image023[6],而且求极大值。(只有ai=0,g(w)<0或者ai>0,g(w)=0值才会最大)

    因此我们可以写作

    clip_image024[6]

    这样我们原来要求的min f(w)可以转换成求clip_image026[10]了。   

    clip_image027[6]

    我们使用clip_image029[6]来表示clip_image026[11]。如果直接求解,首先面对的是两个参数,而clip_image010[53]也是不等式约束,然后再在w上求最小值。这个过程不容易做,那么怎么办呢?

    我们先考虑另外一个问题clip_image030[6]

    D的意思是对偶,clip_image031[10]将问题转化为先求拉格朗日关于w的最小值,将clip_image033[6]clip_image003[16]看作是固定值。之后在求clip_image031[11]最大值的话:

clip_image034[6]

    这个问题是原问题的对偶问题,相对于原问题只是更换了min和max的顺序,而一般更换顺序的结果是Max Min(X) <= MinMax(X)。然而在这里两者相等。用clip_image036[6]来表示对偶问题如下:

    clip_image037[6]

    下面解释在什么条件下两者会等价。假设f和g都是凸函数,h是仿射的(affine,clip_image038[6])。并且存在w使得对于所有的i,clip_image040[10]。在这种假设下,一定存在clip_image042[14]使得clip_image044[14]是原问题的解,clip_image046[6]是对偶问题的解。还有clip_image047[6]另外,clip_image042[15]满足库恩-塔克条件(Karush-Kuhn-Tucker, KKT condition),该条件如下:

    clip_image048[6]

    所以如果clip_image042[16]满足了库恩-塔克条件,那么他们就是原问题和对偶问题的解。让我们再次审视公式(5),这个条件称作是KKT dual complementarity条件。这个条件隐含了如果clip_image050[6],那么clip_image052[10]。也就是说,clip_image052[11]时,w处于可行域的边界上,这时才是起作用的约束。而其他位于可行域内部(clip_image054[6]的)点都是不起作用的约束,其clip_image056[6]。这个KKT双重补足条件会用来解释支持向量和SMO的收敛测试。

    这部分内容思路比较凌乱,还需要先研究下《非线性规划》中的约束极值问题,再回头看看。KKT的总体思想是将极值会在可行域边界上取得,也就是不等式为0或等式约束里取得,而最优下降方向一般是这些等式的线性组合,其中每个元素要么是不等式为0的约束,要么是等式约束。对于在可行域边界内的点,对最优解不起作用,因此前面的系数为0。

2.2 线性可分

    重新回到SVM的优化问题:

    clip_image057[6]

    我们将约束条件改写为:

    clip_image058[6]

    从KKT条件得知只有函数间隔是1(离超平面最近的点),对于在线上的点(clip_image062[6]),前面的系数clip_image060[14],对于其他的不在线上的点(clip_image064[6]),极值不会在他们所在的范围内取得,因此前面的系数clip_image066[14],注意每一个约束式实际对应一个训练样本。

    看下面的图:

clip_image067[6]

    实线是最大间隔超平面,假设×号的是正例,圆圈的是负例。在虚线上的点就是函数间隔是1的点,那么他们前面的系数clip_image060[15],其他点都是clip_image066[15]。这三个点称作支持向量。构造拉格朗日函数如下:    

    clip_image068[6]

    注意到这里只有clip_image010[54]没有clip_image012[16]是因为原问题中没有等式约束,只有不等式约束。

    下面我们按照对偶问题的求解步骤来一步步进行,

    clip_image069[10]

    首先求解clip_image070[10]的最小值,对于固定的clip_image010[55]clip_image070[11]的最小值只与w和b有关。对w和b分别求偏导数。

    clip_image071[6]

    clip_image072[6]

    并得到

    clip_image073[6]

    将上式带回到拉格朗日函数中得到,此时得到的是该函数的最小值(目标函数是凸函数)

    代入后,化简过程如下:

     

  最后得到

clip_image074[6]

     由于最后一项是0,因此简化为

    clip_image075[6]

    这里我们将向量内积clip_image076[6]表示为clip_image077[6]

    此时的拉格朗日函数只包含了变量clip_image010[56]。然而我们求出了clip_image010[57]才能得到w和b。

    接着是极大化的过程clip_image069[11]

clip_image078[6]

    前面提到过对偶问题和原问题满足的几个条件,首先由于目标函数和线性约束都是凸函数,而且这里不存在等式约束h。存在w使得对于所有的i,clip_image040[11]。因此,一定存在clip_image080[6]使得clip_image044[15]是原问题的解,clip_image082[10]是对偶问题的解。在这里,clip_image010[58]就是求clip_image082[11]

    如果求出了clip_image010[59],根据clip_image083[6]即可求出w(也是clip_image044[16],原问题的解)。然后

    clip_image084[6]

    即可求出b。即离超平面最近的正的函数间隔要等于离超平面最近的负的函数间隔

    关于上面的对偶问题如何求解,将在SMO算法一章中来阐明。

    这里考虑另外一个问题,由于前面求解中得到

    clip_image086[6]

    我们通篇考虑问题的出发点是clip_image088[6],根据求解得到的clip_image010[60],我们代入前式得到

    clip_image089[6]

    也就是说,以前新来的要分类的样本首先根据w和b做一次线性运算,然后看求的结果是大于0还是小于0,来判断正例还是负例。现在有了clip_image010[61],我们不需要求出w,只需将新来的样本和训练数据中的所有样本做内积和即可。那有人会说,与前面所有的样本都做运算是不是太耗时了?其实不然,我们从KKT条件中得到,只有支持向量的clip_image060[16],其他情况clip_image066[16]。因此,我们只需求新来的样本和支持向量的内积,然后运算即可。

2.3 线性不可分

我们之前讨论的情况都是建立在样例线性可分的假设上,当样例线性不可分时,我们可以尝试使用核函数来将特征映射到高维,这样很可能就可分了。然而,映射后我们也不能100%保证可分。那怎么办呢,我们需要将模型进行调整,以保证在不可分的情况下,也能够尽可能地找出分隔超平面。

看下面两张图:

clip_image001

可以看到一个离群点(可能是噪声)可以造成超平面的移动,间隔缩小,可见以前的模型对噪声非常敏感。再有甚者,如果离群点在另外一个类中,那么这时候就是线性不可分了。

这时候我们应该允许一些点游离并在在模型中违背限制条件函数间隔小于1)。我们设计得到新的模型如下(也称软间隔):

clip_image002

引入非负参数clip_image004后(称为松弛变量),就允许(1)某些样本点的函数间隔小于1,即在最大间隔区间里面(2)函数间隔是负数,即样本点在对方的区域中。而放松限制条件后,我们需要重新调整目标函数,以对离群点进行处罚,目标函数后面加上的clip_image006就表示离群点越多,目标函数值越大,而我们要求的是尽可能小的目标函数值。这里的C是离群点的权重,C越大表明离群点对目标函数影响越大,也就是越不希望看到离群点。我们看到,目标函数控制了离群点的数目和程度,使大部分样本点仍然遵守限制条件。

模型修改后,拉格朗日公式也要修改如下:

clip_image008

这里的clip_image010clip_image012都是拉格朗日乘子,回想我们在拉格朗日对偶中提到的求法,先写出拉格朗日公式(如上),然后将其看作是变量w和b的函数,分别对其求偏导,得到w和b的表达式。然后代入公式中,求带入后公式的极大值。整个推导过程类似以前的模型,这里只写出最后结果如下:

clip_image013

此时,我们发现没有了参数clip_image004[1],与之前模型唯一不同在于clip_image010[1]又多了clip_image015的限制条件。需要提醒的是,b的求值公式也发生了改变,改变结果在SMO算法里面介绍。先看看KKT条件的变化:

clip_image016

上面式子分别表明在两条间隔线外的样本点前面的系数为0,离群样本点前面的系数为C,而支持向量(也就是在超平面两边的最大间隔线上)的样本点前面系数在(0,C)上通过KKT条件可知,某些在最大间隔线上的样本点也不是支持向量,相反也可能是离群点。

这篇关于SVM(二)从拉格朗日对偶问题到SVM的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1054576

相关文章

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

resultMap如何处理复杂映射问题

《resultMap如何处理复杂映射问题》:本文主要介绍resultMap如何处理复杂映射问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录resultMap复杂映射问题Ⅰ 多对一查询:学生——老师Ⅱ 一对多查询:老师——学生总结resultMap复杂映射问题

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作