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

相关文章

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

Python绘制TSP、VRP问题求解结果图全过程

《Python绘制TSP、VRP问题求解结果图全过程》本文介绍用Python绘制TSP和VRP问题的静态与动态结果图,静态图展示路径,动态图通过matplotlib.animation模块实现动画效果... 目录一、静态图二、动态图总结【代码】python绘制TSP、VRP问题求解结果图(包含静态图与动态图

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

k8s容器放开锁内存限制问题

《k8s容器放开锁内存限制问题》nccl-test容器运行mpirun时因NCCL_BUFFSIZE过大导致OOM,需通过修改docker服务配置文件,将LimitMEMLOCK设为infinity并... 目录问题问题确认放开容器max locked memory限制总结参考:https://Access

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使