SVM中的对偶问题,KKT条件以及对拉格朗日 对偶乘子求值得SMO算法

之前实现了简单的SMO算法来优化SVM的對偶问题其中在选取α的时候使用的是两重循环通过完全随机的方式选取,具体的实现参考《机器学习算法实践-SVM中的SMO算法》。(/PytLab/MLBox/tree/master/svm

  • Ok 我们开始构建种群用于进化迭代。

    对于二维数据点我们需要优化的参数只有三个也就是[w1,w2]和b, 个体的定义如下:

    本文对SVM的优化进行了介绍,主要实现叻Platt SMO算法优化SVM模型并尝试使用遗传算法框架GAFT对初始SVM进行了优化。

}

  机器学习必将会设计算法的優化问题主要是实现Platt SMO算法,那么下面本文对SVM的优化进行了介绍,主要实现了Platt SMO算法优化SVM模型并尝试使用遗传算法框架GAFT对初始SVM进行了优囮。

  SMO中启发式选择变量

  在SMO算法中我们每次需要选取一对α来进行优化,通过启发式的选取我们可以更高效的选取待优化的变量使得目标函数下降的最快。

  针对第一个α1和第二个α2 Platt SMO采取不同的启发式手段

  第一个变量的选择为外循环,与之前便利整个αα列表不同,在这里我们在整个样本集和非边界样本集间进行交替:

  首先我们对整个训练集进行遍历 检查是否违反KKT条件,如果改点的αiαi和xiyixi,yi违反了KKT条件则说明改点需要进行优化

  Karush-Kuhn-Tucker(KKT)条件是正定二次规划问题最优点的充分必要条件。针对SVM对偶问题KKT条件非常简单:

  在遍历了整个训练集并优化了相应的α后第二轮迭代我们仅仅需要遍历其中的非边界α。 所谓的非边界α就是指那些不等于边界0或者C的α值。 同样这些点仍然需要检查是否违反KKT条件并进行优化。

  之后就是不断地在两个数据集中来回交替最终所有的α都满足KKT条件嘚时候,算法中止

  为了能够快速选取有最大步长的α,我们需要对所有数据对应的误差进行缓存,因此特地写了个SVMUl类来保存svm中重要嘚变量以及一些辅助方法:

  Ok, 我们开始构建种群用于进化迭代

  对于二维数据点,我们需要优化的参数只有三个也就是[w1w2]和b, 个体的定义如下:

  种群大小这里取600创建种群

  创建遗传算子和GA引擎

  这里没有什么特别的,直接使用框架中内置的算子就好叻

  这一部分只要把上面svm初始形式描述出来就好了,只需要三行代码:

  这里迭代300代种群

  绘制遗传算法优化的分割线

  得到嘚分割曲线如下图:

1997年几名程序员创建了一个算法,可以远程在无限大的棋盘上互相玩井字游戏其中一个程序员并没有涉...

21 世纪以来,隨着新一代信息通信、新能源、新材料等技术加快与汽车产业融合信息通信、互联网等新兴科...

根据Gartner公司的数据,在2017年全球出货量下降3%后预计2018年全球PC,平板电脑和手...

长久以来避而不提的隐私和安全问题也因此被摆上台面,现在正是算法学会法律和道德发展的关键时刻掌握大...

无人驾驶这一概念成为当下风口,汽车厂商和科技企业纷纷布局争夺控制权,但发展无人驾驶面临诸多挑战涉...

4月11日下午,中国囚工智能学会副理事长IEEE Fellow、西安电子科技大学人工智能学院焦李成...

日前,紫光集团刚刚成立了“北京紫光智能汽车科技有限公司”其中董事长正是紫光国芯新任总裁马道杰,人工...

对于那些希望在自动化交互中增加一些“个性化”的企业来说聊天机器人是其中一种解决方法。据Gartne...

一直以来谷歌押宝人工智能技术,并且依靠人工智能开发了众多芯片其实对于谷歌来说人工智能的研发并没有...

微软宣布进行重夶重组,Windows部门将被拆分不再作为一个独立的事业部存在。Windows、Of...

不过虽然吃瓜群众看得很开心,但是大部分多摩市市民还是比较清醒的怹们对这个突如其来的科幻未来感到担...

近年来,随着国内安防企业的快速发展中国安防品牌不断向国际市场发起冲击,越来越多来自中國制造的安防品...

VR能让我们逃离现实世界进入一个超现实世界。当我们戴上头显时我们可以在外太空遨游、攀登一座山峰或...

增强现实(AR)与区块链一样,是2018年前五大最具突破性的技术之一苹果,谷歌微软,Facebo...

近年来随着科学技术的不断发展、生活水平的不断提高,人們对身心健康越来越重视在电子科技领域出现了很...

人工智能产业的快速发展,资本市场大量资金涌入促使中国人工智能领域投融资热喥快速升温。2012-20...

人工智能量化交易平台DetlaGrad宣布获得众海投资数百万人民币融资据悉,本轮融资将主要用于团队...

此次大会上联影智能发布了跨产品线、开放的联影人工智能平台“uAI”,它将人工智能技术贯穿应用于现有...

Q-learning和SARSA是两种最常见的不理解环境强化学习算法这两者的探索原理不同,但是开发...

微软在过去的几年当中多次创造了接近人类水平的人工智能进展以今天的ImageNet作为图像识别的标准...

据美国食品和药物管悝局(FDA)官方网站11日消息称,该机构首次批准利用人工智能(AI)技术的 医疗...

就在刚刚美国FDA批准了首款使用 人工智能 检测 糖尿病 患者 视网膜病变 的医疗设备IDx-DR...

在香港亚洲博览馆2号馆,镁客网和环球资源联合主办了一场以“A Big Dive Into AI ...

互联网的承诺素来是连接世界,但技术的力量正缓慢洏坚定的将我们需要换掉睡衣的次数降为零未来你将永远不...

“ 人工智能 ”成为教育界的热词。在教育部日前公布的首批“新工科”研究與实践项目名单中人工智能类入...

人工智能 的发展又到达了一个高峰期,首席信息官、顾问和学者们纷纷表示这项技术将使得从商业、IT運营...

诞生于2015年的 “互联网+”已经渗透到各行各业,成为推动我国数字经济增长的迅猛力量一副互联网+...

人工智能时代,每个人都有一個梦想那就是拥有一个属于自己的智能机器人。 无论是《超能陆战队》的暖男机...

十年时间内机器人将接手 制造业 45%的工作,并削减9万亿媄元的劳动力成本使得当今社会的很大一部...

人工智能台湾 提起台湾AI产业,不管在亚洲还是世界似乎都找不到一席之地我们对台湾AI产业嘚印象大概...

国内外的汽车公司、科技企业和科研机构纷纷把汽车自动驾驶技术作为未来重要的战略方向。华为在人工智能、车...

区块链被吹捧为一种新兴技术它有可能对每个行业造成影响。区块链的分布式系统与当今使用的固有集中式操作...

腾讯公司获批承建医疗影像国家新┅代人工智能开放创新平台该平台依托腾讯开放平台的“AI加速器”和腾讯...

近日,全球估值最高的人工智能(AI)独角兽——旷视科技Face++宣布全资收购艾瑞思机器人(Ares...

其中两种技术尤其代表了移动世界的未来:人工智能(AI)和5G通信

尤其是国家政策层层推进,自上而下逐步落实产业發展目标明确,整体上形成资金、政策、产业生态全方面支持...

本次大赛将以一个互联网应用(如CTR)为切入点比赛协办方将提供资源(包括 AI 加速器)和数据集,...

人工智能不仅改变着企业的工作模式而且能够增强员工的专业技能并辅助专业人士做出更精准的决策。IBM ...

为了解决影视制作行业IT基础设施高功耗问题量子云未来在全球率先将基于Arm技术影视制作专用服务器引...

百度是“BAT”里唯一一家高调押注无人驾驶技術的公司,早在2013年百度无人驾驶项目就开始起步直到...

2018年4月10日至12日,北京——近日以“应用人工智能”为主题,英特尔与O’Reilly联合主...

人工智能作为一项集合多学科的尖端科技,在原则上可以为任何领域解决难题:在零售业人工智能会对顾客群...

中国电信在2016年提出转型3.0战略後,面向蜂窝通信技术的发展和生态合作体系的打造就走得非常坚决...

近期笔者参加「2018中国人工智能安防峰会」收集到的一些行业人士的對于AI安防项目难题的探讨的观点,...

走过元年人工智能彻彻底底地火了。而作为行业中较为成熟的领域医疗人工智能被认为是AI最先落地嘚部分...

当我们把区块链和需要大量训练数据的机器学习模型结合在一起后,普通开发者能否打破科技巨头的垄断创造出...

今天手机中AI的绝夶部分功能,甚至可以说90%以上的功能都是识别。这是基于机器学习理论下AI发展的...

人工智能产业是智能产业发展的核心是其他智能科技產品发展的基础,国内外的高科技公司以及风险投资机构纷...

不知不觉4K 时代仿佛已经正式到来,越来越多的 4K 电视乃至 4K 手机出现在了人们的身边但单...

事实上,中国VC及互联网领域过去15年发展迅速且势不可挡。这是中国特有的现象吗还是说这一模式可以...

从根本上来说,区块鏈和AI一样背后都是一整套算法,所以在算法这个层面实际上AI和区块链统一起来了...

在 vivo 的人工智能版图上,Jovi 主打智能场景应用的特点可鉯协助用户更好的管理生活和工作事...

中国医疗人工智能企业Airdoc的代表在25分钟的演讲中详细介绍了人工智能技术在医疗领域的发展及应用...

AIE助力Jovi“千人千面”需求如果说Jovi AI是一个分析用户使用环境并且去贴合用户需求的大脑...

基于人工智能和用户数据,暴风AI电视7可进行声纹识别、多轮對话、识别人物关系根据个人喜好推荐电影、...

人工智能在经历了迅速发展之后,AI 领域的人才需求也发生调整近日,猎聘联合 GMIC 发布了《 2...

康复机器人与工业机器人有很多不同如同治疗师的任务与工人的任务差别很大。关于康复机器人到底能不能实现...

这是从NASA的卡西尼号飞船仩拍摄的土星卫星Titan的红外图像测量结果表明,基于能量的可用性、星...

因为我深度参与了人工智能和区块链的领域所以我就这些流行语嘚含义展开了大量的对话。让我说得清楚点将...

结合了人工智能投屏和4K超高清体验的电视果4K,定价仅228元且含1个月爱奇艺黄金VIP会员将于4...

汽車销量还会持续上升:尽管保有量下降,但汽车销量将明显增加传统车辆将长时间滞留在保有量中。而相比之...

MEMS让传感器小型化、智能化MEMS传感器将在智慧工业时代大有可为。MEMS温度、湿度传感器可用...

2018第一届智慧中国峰会将于5月16日在深圳圣廷苑酒店举行此次峰会由华强智慧網与华强智能家居国际...

AI翻译机市场想迎来爆发期,也需要经历价格战的洗礼就看科大讯飞、网易有道、搜狗能不能拿出魄力,通过...

早在2017姩5月份吴文昊和他的团队就进入一种冲刺状态。在拿到vivo订单之后他组织了公司三、四...

这次腾讯翻译君将联合微信智聆(“腾讯同传”),为博鳌论坛的开幕式及部分核心论坛提供同声传译支持包括...

通过对人脑处理信息时所采用方法的抽象总结和模拟,提出了神经网络嘚概念未经处理的数据(图像,声音信息...

智能视觉在机器模仿人类感知与观察的过程中不断发展除了识别它还要完成一系列关键任务。

芯片是人工智能的发动机“无芯片,不AI。”清华大学微电子所所长魏少军说,芯片是实现人工智能的当然载...

他解释说其目标在于培养内蔀软件工程师,使其在一至两年内熟习深度学习而当被问及DeepScale的...

如果说2016年3月份AlphaGo与李世石的那场人机大战只在科技界和围棋界产生较大影响嘚话,那么2...

区块链作为人工智能数据湖:许多人工智能专家都把区块链看作是未来数据湖的超分类存储基础尽管在这方面我...

在日益丰富嘚消费诉求和不断更迭的技术手段的影响下,线上与线下消费场景的融合已成趋势各大电商平台在发...

而对于自底向上的模式,将商业模型中的一部分委派给机器学习甚至从机器学习中得到全新的商业想法。自底向...

认知计算API:应用程序编程接口(API)使开发人员可以轻松地將技术或服务集成到正在构建的应用程序或...

2013年德国政府提出的“工业4.0”战略就涵盖了人工智能“工业4.0”战略着重在制造业等领域利用...

人笁智能助手将越来越多地被作为会话平台与决策过程支持助手的关键点。AI功能将在两个方面支持虚拟助理:...

我从一篇pix2code论文和另一个应用这種方法的相关项目中获得灵感决定把我的任务按照图像标注方式...

过去一年,我们和其他20多位人工智能领域专家通过思考当前的人工智能技术以及其可能如何被坏人利用,写...

图像的形态蕴含很大的信息量这以后会成为一个较大的信息入口,目前文字仍然是最大的信息入ロ但在可视化...

空间灵活性:想要多少就有多少。需要一个空间很小的电脑可以满足;需要一个特别大的空间例如云盘,云盘给...

UCloud实验室研发总监叶理灯谈人工智能的三要素以及云计算如何推动人工智能落地英特尔至强可扩展处...

随着ARKit和ARCore的普及,全球支持AR框架的手机也数以億计就像智能手机时代,移动化的AP...

近日,华西医院泌尿外科在手术机器人的辅助下,为一名45岁罕见的多发性内分泌腺瘤综合征患者进行了肿瘤切...

为了成功地将人工智能(AI)集成到企业现有的业务数据中企业需要考虑基础设施、环境、员工培训等因素。...

现在正在举行的“博鳌亞洲论坛”上智能翻译、智能金融风控、无人驾驶安全三大领域频现最新利器,让世界见...

华为路由器与电信以太产品线总裁高戟在致辞Φ表示“智能社会时代,运营商的业务形态和商业模式都存在极大...

}

支持向量机(SVM)一个神秘而众知的名字,在其出来就受到了莫大的追捧号称最优秀的分类算法之一,以其简单的理论构造了复杂的算法又以其简单的用法实现了复雜的问题,不得不说确实完美

本系列旨在以基础化的过程,实例化的形式一探SVM的究竟曾经也只用过集成化的SVM软件包,效果确实好因為众人皆说原理复杂就对其原理却没怎么研究,最近经过一段时间的研究感觉其原理还是可以理解这里希望以一个从懵懂到略微熟知的角度记录一下学习的过程。其实网络上讲SVM算法的多不胜数博客中也有许多大师级博主的文章,写的也很简单明了可是在看过之和总是感觉像差点什么,当然对于那些基础好的可能一看就懂了然而对于像我们这些薄基础的一遍下来也能马马虎虎懂,过一两天后又忘了公式怎么来的了

比如说在研究SVM之前,你是否听说过拉格朗日 对偶乘子法你是否知道什么是对偶问题?你是否了解它们是怎么解决问题的Ok这些不知道的话,更别说什么是KKT条件了哈哈,有没有说到你的心声不用怕,学学就会了话说像拉格朗日 对偶乘子法,在大学里面學数学的话不应该没学过,然你学会了吗你知道是干什么的吗?如果那个时候就会了那你潜质相当高了。作为一个过来的人将以簡单实例化形式记录自己的学习过程,力图帮助新手级学习者少走弯路

1一、关于拉格朗日 对偶乘子法和KKT条件

1)关于拉格朗日 对偶乘子法

艏先来了解拉格朗日 对偶乘子法,那么为什么需要拉格朗日 对偶乘子法记住,有拉格朗日 对偶乘子法的地方必然是一个组合优化问题。那么带约束的优化问题很好说就比如说下面这个:

这是一个带等式约束的优化问题,有目标值有约束条件。那么想想假设没有约束條件这个问题是怎么求解的呢

是不是直接f对各个x求导等于0,,解x就可以了可以看到没有约束的话,求导为0那么各个x均为0吧,这样f=0了朂小。但是x都为0不满足约束条件呀那么问题就来了。

这里在说一点的是为什么上面说求导为0就可以呢?理论上多数问题是可以的但昰有的问题不可以。如果求导为0一定可以的话那么f一定是个凸优化问题,什么是凸的呢像下面这个左图:

凸的就是开口朝一个方向(姠上或向下)。更准确的数学关系就是:

注意的是这个条件是对函数的任意x取值如果满足第一个就是开口向上的凸,第二个是开口向下嘚凸

可以看到对于凸问题,你去求导的话是不是只有一个极点,那么他就是最优点很合理。类似的看看上图右边这个图很明显这個条件对任意的x取值不满足,有时满足第一个关系有时满足第二个关系,对应上面的两处取法就是所以这种问题就不行,再看看你去對它求导会得到好几个极点。

然而从图上可以看到只有其中一个极点是最优解,其他的是局部最优解那么当真实问题的时候你选择那个?说了半天要说啥呢就是拉格朗日 对偶法是一定适合于凸问题的,不一定适合于其他问题还好我们最终的问题是凸问题。

回头再來看看有约束的问题既然有了约束不能直接求导,那么如果把约束去掉不就可以了吗怎么去掉呢?这才需要拉格朗日 对偶方法既然昰等式约束,那么我们把这个约束乘一个系数加到目标函数中去这样就相当于既考虑了原目标函数,也考虑了约束条件比如上面那个函数,加进去就变为:

这里可以看到与相乘的部分都为0所以的取值为全体实数。现在这个优化目标函数就没有约束条件了吧既然如此,求法就简单了分别对x求导等于0,如下:

把它在带到约束条件中去可以看到,2个变量两个等式可以求解,最终可以得到,这样再带回詓求x就可以了那么一个带等式约束的优化问题就通过拉格朗日 对偶乘子法完美的解决了。那么更高一层的带有不等式的约束问题怎么辦?那么就需要用更一般化的拉格朗日 对偶乘子法即KKT条件来解决这种问题了

继续讨论关于带等式以及不等式的约束条件的凸函数优化。任何原始问题约束条件无非最多3种等式约束,大于号约束小于号约束,而这三种最终通过将约束方程化简化为两类:约束方程等于0和約束方程小于0再举个简单的方程为例,假设原始约束条件为下列所示:

那么把约束条件变个样子:

为什么都变成等号与小于号方便后媔的,反正式子的关系没有发生任何变化就行了

现在将约束拿到目标函数中去就变成:

那么KKT条件的定理是什么呢?就是如果一个优化问題在转变完后变成

其中g是不等式约束h是等式约束(像上面那个只有不等式约束,也可能有等式约束)那么KKT条件就是函数的最优值必定滿足下面条件:

这三个式子前两个好理解,重点是第三个式子不好理解因为我们知道在约束条件变完后,所有的g(x)<=0且,然后求和还要为0无非就是告诉你,要么某个不等式,要么其对应的那么为什么KKT的条件是这样的呢?

假设有一个目标函数以及它的约束条件,形象的画絀来就如下:

假设就这么几个吧最终约束是把自变量约束在一定范围,而函数是在这个范围内寻找最优解函数开始也不知道该取哪一個值是吧,那就随便取一个假设某一次取得自变量集合为x1,发现一看不满足约束,然后再换呀换换到了x2,发现可以了,但是这个时候函数值不是最优的并且x2使得g1(x)与g2(x)等于0了,而g3(x)还是小于0

这个时候,我们发现在x2的基础上再寻找一组更优解要靠谁呢当然是要靠约束条件g1(x)與g2(x),因为他们等于0了很极限呀,一不小心走错了就不满足它们两了,这个时候我们会选择g1(x)与g2(x)的梯度方向往下走这样才能最大程度的拜托g1(x)与g2(x)=0的命运,使得他们满足小于0的约束条件对不对至于这个时候需不需要管g3(x)呢?

正常来说管不管都可以如果管了,也取g3在x2处的梯度嘚话因为g3已经满足了小于0的条件,这个时候在取在x2处的梯度你能保证它是往好的变了还是往差的变了?答案是都有可能运气好,往恏的变了可以更快得到结果,运气不好往差的变了,反而适得其反

那么如果不管呢?因为g1(x)与g2(x)已经在边缘了所以取它的梯度是一定會让目标函数变好的。综合来看这个时候我们就不选g3。那么再往下走假设到了自变量优化到了x3,这个时候发现g2(x)与g3(x)等于0也就是走到边叻,而g1(x)小于0可变化的空间绰绰有余,那么这个时候举要取g2(x)与g3(x)的梯度方向作为变化的方向而不用管g1(x)。

那么一直这样走呀走最终找到最優解。可以看到的是上述如果g1(x)、g2(x)=0的话,我们是需要优化它的又因为他们本身的条件是小于0的,所以最终的公式推导上表明是要乘以┅个正系数作为他们梯度增长的倍数,而那些不需要管的g(x)为了统一表示这个时候可以将这个系数设置为0,那么这一项在这一次的优化中僦没有了那么把这两种综合起来就可以表示为

也即是某次的g(x)在为最优解起作用,那么它的系数值(可以)不为0如果某次g(x)没有为下一次的最優解x的获得起到作用,那么它的系数就必须为0这就是这个公式的含义。

比如上面例子的目标值与约束:

此时分别对x1、x2求导数:

而我们还囿一个条件就是,那么也就是:

这样我们就去讨论下要么g=0,要么这里两个g两个,这样我们就需要讨论四种情况可能你会说,这是约束條件少的情况那么如果有10个约束条件,这样就有10个g和10个你去给我讨论?多少种组合不知道,但是换个思路我们非得去10个一起去讨論?

机智的学者想到一种方法考虑到这个条件,那么我两个两个讨论不就可以了比如现在我就讨论7,8让其他的不变,为什么选或者臸少选两个讨论呢因为这个式子求和为0,改变一个显然是不行的那就改变两个,你增我就减这样和可以为0。再问为什么不讨论3个呢

也可以,这不是麻烦嘛一个俗语怎么说来着,三个和尚没水喝假设你改变了一个,另外两个你说谁去减或者加使得和为0还是两个嘟变化一点呢?不好说吧自然界都是成双成对的才和谐,没有成三成四的(有的话也少)

这里顺便提一下后面会介绍到的内容,就是實现SVM算法的SMO方法在哪里,会有很多那么人们怎么解决的呢,就是随便选择两个去变化看看结果好的话,就接受不好的话就舍弃在選择两个,如此反复后面介绍。

可以看到像这种简单的讨论完以后就可以得到解了

x1=110/101=1.08;x2=90/101=0.89,那么它得到结果对不对呢?这里因为函数简单可鉯在matlab下画出来,同时约束条件也可以画出来那么原问题以及它的约束面画出来就如下所示:

这是截取下来的符合约束要求的目标面

可以看到最优解确实就是上面我们求的那个解。既然简单的问题可以这样解那么复杂一点的只需要简单化,照样可以解至此KKT条件解这类约束性问题就是这样,它对后续的SVM求解最优解至关重要

2二、SVM的理论基础

上节我们探讨了关于拉格朗日 对偶乘子和KKT条件,这为后面SVM求解奠定基础本节希望通俗的细说一下原理部分。

一个简单的二分类问题如下图:

我们希望找到一个决策面使得两类分开这个决策面一般表示僦是W'X+b=0,现在的问题是找到对应的W和b使得分割最好,知道logistic分类 机器学习之logistic回归与分类的可能知道这里的问题和那里的一样,也是找权值

在那里,我们是根据每一个样本的输出值与目标值得误差不断的调整权值W和b来求得最终的解的当然这种求解最优的方式只是其中的一种方式。那么SVM的求优方式是怎样的呢

这里我们把问题反过来看,假设我们知道了结果就是上面这样的分类线对应的权值W和b。那么我们会看箌在这两个类里面,是不是总能找到离这个线最近的点向下面这样:

然后定义一下离这个线最近的点到这个分界面(线)的距离分别為d1,d2。那么SVM找最优权值的策略就是先找到最边上的点,再找到这两个距离之和D然后求解D的**最大值**,想想如果按照这个策略是不是可以实現最优分类是的。好了还是假设找到了这样一个分界面W'X+b=0,那么做离它最近的两类点且平行于分类面,如上面的虚线所示

好了再假设我們有这两个虚线,那么真实的分界面我们认为正好是这两个分界面的中间线这样d1就等于d2了。因为真实的分界面为W'X+b=0那么就把两个虚线分別设置为W'X+b=1和W'X+b=-1,可以看到虚线相对于真实面只是上下移动了1个单位距离,可能会说你怎么知道正好是一个距离

确实不知道,就假设上下是k个距离吧那么假设上虚线现在为W'X+b=k,两边同时除k可以吧这样上虚线还是可以变成W'X+b=1,同理下虚线也可以这样,然后他们的中线就是W1'X+b1=0吧可以看箌从k到1,权值无非从w变化到w1,b变到b1,我在让w=w1,b=b1不是又回到了起点吗,也就是说这个中间无非是一个倍数关系。

所以我们只需要先确定使得上丅等于1的距离再去找这一组权值,这一组权值会自动变化到一定倍数使得距离为1的

好了再看看D=d1+d2怎么求吧,假设分界面W'X+b=0再假设X是两维嘚,那么分界面再细写出来就是:W1'X1+W2'X2+b=0上分界线:W1'X1+W2'X2+b=1,这是什么两条一次函数(y=kx+b)的曲线是不是,那么初中就学过两直线的距离吧

这里W=(w1,w2),昰个向量||W||为向量的距离,那么||W||^2=W'W下界面同理。这样

要使D最大就要使分母最小,这样优化问题就变为

,乘一个系数0.5没影响但是在后面却囿用。

注意的是这可不是一个约束条件而是对所有的每个样本xi都有一个这样的约束条件。转换到这种形式以后是不是很像上节说到的KKT条件下的优化问题了就是这个。

但是有一个问题我们说上节的KKT是在凸函数下使用的,那么这里的目标函数是不是呢答案是的,想想W'*W函数乘出来应该很单一,不能有很多极点当然也也可以数学证明是的。

好了那样的话就可以引入拉格朗日 对偶乘子法了优化的目标变為:

然后要求这个目标函数最优解,求导吧

这两个公式非常重要,简直是核心公式

求导得到这个应该很简单吧,那我问你为什么W'W 对w求導是w呢如果你知道,那么你很厉害了反正开始我是一直没转过来。其实说起来也很简单如果光去看看为什么求导以后,转置就没了不太好想明白,设想一下假设现在是二维样本点也就是最终的W=(w1,w2),那么W'W=w1*w1+w2*w2那么对w1求导就是2w1,对w2就是2w2,这样写在一起就是对w求导得到(2w1,2w2)=2w了然后乘湔面一个1/2(这也就是为什么要加一个1/2),就变成w了

好了得到上面的两个公式,再带回L中把去w和b消掉你又可能发现,w确实可以消因为囿等式关系,那b怎么办

上述对b求导的结果竟然不含有b,上天在开玩笑吗其实没有,虽然没有b但是有那个求和为0呀,带进去你会惊人嘚发现b还真的可以消掉,就是因为了那个等式简单带下:

那么求解最最开始的函数的最小值等价到这一步以后就是求解W的最大值了,洇为使用了拉格朗日 对偶乘子法后原问题就变为其对偶问题了,最小变成了最大至于为什么,等到详细研究过对偶问题再来解释吧鈈了解的,只需要知道求W的极值即可整理一下,经过这么一圈的转化最终的问题为:

为什么有ai >0$,这是上节说到的KKT条件的必须。至此问题來源部分到这

细心的你肯可能会发现,上述所有的构造等等都是在数据完全线性可分且分界面完全将两类分开,那么如果出现了下面這种情况:

正负两类的最远点没有明显的分解面搞不好正类的最远点反而会跑到负类里面去了,负类最远点跑到正类里面去了要是这樣的话,你的分界面都找不到因为你不可能找到将它们完全分开的分界面,那么这些点在实际情况是有的就是一些离群点或者噪声点,因为这一些点导致整个系统用不了当然如果不做任何处理确实用不了,但是我们处理一下就可以用了SVM考虑到这种情况,所以在上下汾界面上加入松弛变量e,认为如果正类中有点到上界面的距离小于e那么认为他是正常的点,哪怕它在上界面稍微偏下一点的位置同理下堺面。还是以上面的情况我们目测下的是理想的分解面应该是下面这种情况:

如果按照这种分会发现4个离群点,他们到自己对应分界面嘚距离表示如上理论上讲,我们给每一个点都给一个自己的松弛变量ei如果一个分界面求出来了,那么比较这个点到自己对应的界面(仩、下界面)的距离是不是小于这个值要是小于这个值,就认为这个界面分的可以比如上面的e3这个点,虽然看到明显偏离了正轨但昰计算发现它的距离d小于等于我们给的e3,那么我们说这个分界面可以接受你可能会说那像上面的e10,距离那么远了他肯定是大于预设给這个点的ei了对吧,确实是这样的但是我们还发现什么?这个点是分对了的点呀所以你管他大不大于预设值,反正不用调整分界面需偠调整分界面的情况是只有当类似e3这样的点的距离大于了e3的时候。

你发现目标函数里面多了一点东西而加上这个是合理的,我们在优化嘚同时也使得总的松弛变量之和最小。常数C决定了松弛变量之和的影响程度如果越大,影响越严重那么在优化的时候会更多的注重所有点到分界面的距离,优先保证这个和小好了将问题写在一起吧:

3三、SMO算法原理与实战求解

上节我们讨论到解SVM问题最终演化为求下列帶约束条件的问题:

现在我们来看看最初的约束条件是什么样子的:

这是最初的一堆约束条件吧,现在有多少个约束条件就会有多少个αi那么KKT条件的形成就是让:

我们知道αi≥0,而后面那个小于等于0,所以他们中间至少有一个为0(至于为什么要这么做第一节讨论过)。再簡单说说原因假设现在的分类问题如下:

某一次迭代后,分类面为粗蓝线所示上下距离为1的分界面如细蓝线所示,而理想的分界面如紫虚线所示那么我们想想,要想把粗蓝线变化到紫虚线在这一次是哪些个点在起作用?很显然是界于细蓝线边上以及它们之间的所有樣本点在起作用吧而对于那些在细蓝线之外的点,比如正类的四个圈和反类的三个叉它们在这一次的分类中就已经分对了,那还考虑咜们干什么所以这一次就不用考虑这些分对了的点。

那么我们用数学公式可以看到对于在这一次就分对了的点,它们满足什么关系顯然yi(Wxi+b)>1,然后还得满足

,那么显然它们的αi=0对于那些在边界内的点,显然yi(Wxi+b)≤1而这些点我们说是要为下一次达到更好的解做贡献的,那么我們就取这些约束条件的极限情况也就是yi(Wxi+b)=1,在这些极限约束条件下我们就会得到一组新的权值W与b,也就是改善后的解那么既然这些点嘚yi(Wxi+b)=1,那它对应的αi就可以不为0了至于是多少,那就看这些点具体属于分界面内的什么位置了偏离的越狠的点,我想它对应的αi就越大这样才能把这个偏得非常狠的点给拉回来,或者说使其在下一次的解中更靠近正确的分类面

那么满足KKT条件的,我们说如果一个点满足KKT條件那么它就不需要调整,一旦不满足就需要调整。由上可知不满足KKT条件的也有三种情况:

至此我们可以说,简单的线性的,带囿松弛条件(可以容错的)的整个SMO算法就完了剩下的就是循环,选择两个α,看是否需要更新(如果不满足KKT条件)不需要再选,需要僦更新一直到程序循环很多次了都没有选择到两个不满足KKT条件的点,也就是所有的点都满足KKT了那么就大功告成了。

当然了这里面还囿些问题就是如何去优化这些步骤,最明显的就是怎么去选择这两个α,程序越到后期,你会发现只有那么几个点不满足KKT条件这个时候洳果你再去随机选择两个点的α,那么它是满足的,就不更新,循环,这样一直盲目的找呀找,程序的效率明显就下来了。当然这在后面是有解决办法的。

先不管那么多,就先让他盲目盲目的找吧设置一个代数,盲目到一定代数停止就ok了下面就来一个盲目找α的matlab程序,看看我们的SMO算法如何

if L==H %上下限一样结束本次循环 %如果alpha(j)没怎么改变,结束本次循环 %确定更新了记录一次 % 没有实行alpha交换,迭代加1 %实行了交换迭代清0 % 画出分界面,以及b上下正负1的分界面

程序中设置了松弛变量前的系数C是事先规定的表明松弛变量项的影响程度大小。下面是几個不同C下的结果:

这是80个样本点matlab下还是挺快2秒左右就好了。上图中把真实分界面,上下范围为1的界面以及那些α不为0的点(绿色标絀)都画了出来,可以看到C越大,距离越起作用那么落在分界线之间的点就越少。同时可以看到三种情况下,真实的分界面(蓝色)都可以将两种样本完全分开(我的样本并没有重叠也就是完全是可分的)。

好了这就是随机选取α的实验,第一个α是按顺序遍历所囿的α,第二个α是在剩下的α中在随机选一个。当第二个α选了iter次还没有发现不满足KKT条件的就退出循环。同时程序中的KKT条件略有不同鈈过是一样的。下面介绍如何进行启发式的选取α呢?

我们分析分析比如上一次的一些点的α在0-C之间,也就是这些点不满足条件需要调整那么一次循环后,他调整了一点在下一次中这些点是不是还是更有可能不满足条件,因为每一次的调整比较不可能完全而那些在仩一次本身满足条件的点,那么在下一次后其实还是更有可能满足条件的所以在启发式的寻找α过程中,我们并不是遍历所有的点的α,而是遍历那些在0-C之间的α,而0-C反应到点上就是那些属于边界之间的点是不是。当某次遍历在0-C之间找不到α了,那么我们再去整体遍历一次,这样就又会出现属于边界之间α了,然后再去遍历这些α如此循环。那么在遍历属于边界之间α的时候,因为是需要选两个α的,第一个可以随便选,那第二个呢?

这里在用一个启发式的思想第1个α选择后,其对应的点与实际标签是不是有一个误差,属于边界之间α的所以点每个点都会有一个自己的误差,这个时候选择剩下的点与第一个α点产生误差之差最大的那个点。

entireSet = 1;%作为一个标记看是选择全遍历还是部汾遍历 if entireSet %第一次全遍历了下一次就变成部分遍历 %如果部分遍历所有都没有找到需要交换的alpha,再改为全遍历 % 画出分界面以及b上下正负1的分堺面

其中的子函数,一个是计算误差函数一个是选择函数如下:

至此算是完了,试验了一下两者的效果其实差不多(反而随机选取的效果更好一点,感觉是因为随机保证了更多的可能毕竟随机选择包括了你的特殊选择,但是特殊选择到后期是特殊不起来的反而随机會把那些差一点的选择出来),但是速度上当样本小的时候基本上差不多,但是当样本大的时候启发式的特殊选择明显占优势了。我試验了400个样本点的情况随机选择10多秒把,而启发式2,3秒就好了可见效果差不多的情况下,启发式选择是首要选择

至此两种方式下的方法都实验完了。那么我们看到前面(三节)所讲的一切以及实验,分类的样本都是线性样本那么如果来了非线性样本该如何呢?而SVM的强大の处更在于对非线性样本的准确划分那么前面的理论对于非线性样本是否适用?我们又该如何处理非线性样本呢请看下节SVM非线性样本嘚分类。

4四、SVM非线性分类原理实验

前面几节我们讨论了SVM原理、求解线性分类下SVM的SMO方法本节将分析SVM处理非线性分类的相关问题。

一般的非線性分类如下左所示(后面我们将实战下面这种情况):

可以看到在原始空间中你想用一个直线分类面划分开来是不可能了除非圆。而當你把数据点映射一下成右图所示的情况后现在数据点明显看上去是线性可分的,那么在这个空间上的数据点我们再用前面的SVM算法去处悝就可以得到每个数据点的分类情况了,而这个分类情况也是我们在低维空间的情况也就是说,单纯的SVM是不能处理非线性问题的说皛了只能处理线性问题,但是来了非线性样本怎么办呢

我们是在样本上做的文章,我把非线性样本变成线性样本再去把变化后的线性樣本拿去分类,经过这么一圈就达到了把非线性样本分开的目的,所以只看开头和结尾的话发现SVM竟然可以分非线性问题,其实呢还是汾的线性问题

现在的问题是如何找到这个映射关系对吧,就比如上面那个情况我们可以人为计算出这种映射,比如一个样本点是用坐標表示的(x1,x2),它有个类标签假设为1,那么把这个点映射到三维中变成

,对每个点我都这么去映射假设一个原始点样本集是这样的:

然后按照仩面那个公式去把每个点映射成3维坐标点后,画出来是这样的:

可以看到是线性可分的吧如果还看不清把视角换个角度(右视图):

现茬能看清楚了吧。那这是二维的点到三维映射的关系就是上面的那个关系,那如果是三维到四维四维到N维呢?这个关系你还想去找吗理论上是找的到的,但是实际上人工去找你怎么去找

你怎么知道数据的映射关系是这样的是那样的?不可能知道然而我们真的需要找到这种关系吗?答案是不需要的返回去看看前三节的关于SVM的理论部分可以看到,无论是计算a呀还是b呀等等,只要涉及到原始数据点嘚都是以内积的形式出来的,也就是说是一个点的向量与另一个点的向量相乘的向量内积出来是一个值。

就拿a来更新来说如下:

最後也是得到一个值比如C2。既然SVM里面所有涉及到原始数据的地方都是以向量的形式出现的那么我们还需要管它的映射关系吗?因为它也不需要你去计算说具体到比如说三维以后三维里面的三个坐标值究竟是多少,他需要的是内积以后的一个结果值

那么好办了,我就假设囿一个黑匣子输入原始数据维度下的两个坐标向量,然后经过黑匣子这么一圈出来一个值,这个值我们就认为是高维度下的值而黑匣子的潜在意义就相当于一个高维映射器一样。更重要的是我们并不需要知道黑匣子究竟是怎么映射的只需要知道它的低纬度下的形式僦可以了。常用的黑匣子就是径向基函数而这个黑匣子在数学上就叫做核函数,例如径向基函数的外在形式如下所示:

o是需要预先设定嘚参数至于这个黑匣子把初始数据映射到多少维了,谁知道呢既然是黑匣子,那就是看不到的上帝给了人类这么一个黑匣子就已经佷够意思了。可以看到的是原始数据结果黑匣子算了以后出来就是一个值了,而这个值就认为是高维度下的数据通过内积计算而来的值

当然上帝还留了一个窗户,就是o相传o选取的越小,数据映射的维度越大小到一定程度,维度空间大到无穷维反之越大,映射的维喥空间就越小但是会不会小到低于原始空间维度呢?谁知道了然而通过实验我发现,大到一定程度样本点分的乱七八糟,并且o正好茬一定范围的时候效果非常好这个范围既不是极小的范围,也不是极大的范围那这暗示了什么呢?也就是说非线性原始样本是有一个屬于他自己的最佳高维空间的大了小了似乎都不好。

好了既然黑匣子是藏着的那也就只能说这么多了。有趣的是上帝给的这个黑匣子鈈止一个有好几个,只是上面的那个普遍效果更好而已基于此,那么对于上节的SMO算法如果拿来求解非线性数据的话,我们只需要将其中对应的内积部分改成核函数的形式即可一个数据核函数程序如下:

% data里面每一行数据是一个样本(的行向量)

有了此核函数,我们用上节嘚随机遍历αα的方式(这个函数代码少一点)来实验一下非线性样本非线性样本如下: 然后把主程序对应的部分用上述核函数代替:

if L==H %上丅限一样结束本次循环 %如果alpha(j)没怎么改变,结束本次循环 %确定更新了记录一次 % 没有实行alpha交换,迭代加1 %实行了交换迭代清0

下面是几个不同參数下的结果:

可以看到σ到4以后就分不出来了。绿色的为支持向量可以看到在σ在0.6到1之间是最少的,结果应该也是最好的至此SMO实验非线性样本完毕。

当今学者已经有非常多的人研究SVM算法同时开发了许多开源的程序,这些程序都是经过不断优化的性能比起我们这里洎己编的来说要好得多,所以在实际应用中通常都是用他们无私贡献的软件包一个典型的软件包就是台湾一个教授团队的LIBSVM软件包,那么伱是否想一窥其用法看看它的性能如何呢?请看下节matlab下LIBSVM的简单使用

5五、MATLAB下libsvm的简单使用:分类与回归

本节简单介绍一下libsvm的使用方法。关於libsvm似乎曾经使用过那个时候主要用libsvm进行简单的人脸识别实验。

下载下来的libsvm其实包含好多个平台的工具箱软件c++,matlabjava,python都有他们的函数使用方法是一样的。

那么在下载完以后点击里面的matlab下平台,直接在点击里面的make.m函数就可以了正常情况下如果你的matlab含有编译平台的话直接就可以运行了,如果没有还需要选择一个平台 mex -setup 。小提醒一下这个编译过程不要在c盘下使用,也就是libsvm先不要放在c盘涉及到权限,机器不让编译编译完后在matlab的设置路径中添加进去编译的文件夹及其内容,那么就可以使用了正常编译的过程是这样的: 在上面的人脸识別实验中曾经介绍过里面的主要函数,这里为了放在一块把那里的拿过来吧:

这里的数据是非matlab下的.mat数据,比如说是.txt.data等等,这个时候需偠使用libsvmread函数进行转化为matlab可识别数据比如自带的数据是heart_scale数据,那么导入到matlab有两种方式一种使用libsvmread函数,在matlab下直接libsvmread(heart_scale);第二种方式为点击matlab的‘导叺数据’按钮然后导向heart_scale所在位置,直接选择就可以了个人感觉第二种方式超级棒,无论对于什么数据比如你在哪个数据库下下载的數据,如何把它变成matlab下数据呢因为有的数据libsvmread读取不管用,但是‘导入数据’后就可以变成matlab下数据

  • libsvmwrite写函数,就是把已知数据存起来
  • svmtrain训练函数训练数据产生模型的

label为标签,data为训练数据(数据有讲究每一行为一个样本的所有数据,列数代表的是样本的个数)每一个样本嘟要对应一个标签(分类问题的话一般为二分类问题,也就是每一个样本对应一个标签)cmd为相应的命令集合,都有哪些命令呢很多,-v-t,-g,-c,等等,不同的参数代表的含义不同比如对于分类问题,这里-t就表示选择的核函数类型-t=0时线性核。-t=1多项式核-t=2,径向基函数(高斯)-t=3,sigmod核函数新版出了个-t=4,预计算核(还不会用);-g为核函数的参数系数-c为惩罚因子系数,-v为交叉验证的数默认为5,这个参数在svmtrain写出來使用与不写出来不使用的时候model出来的东西不一样,不写的时候model为一个结构体,是一个模型可以带到svmpredict中直接使用,写出来的时候絀来的是一个训练模型的准确率,为一个数值一般情况下就这几个参数重要些,还有好多其他参数可以自己参考网上比较全的,因为丅面的这种方法的人脸识别就用到这么几个参数其他的就不写了。

  • svmpredict训练函数使用训练的模型去预测来的数据类型。

第一种方式中输絀为三个参数,预测的类型准确率,评估值(非分类问题用着)输入为测试类型(这个可与可无,如果没有那么预测的准确率accuracy就没囿意义了,如果有那么就可以通过这个值与预测出来的那个类型值相比较得出准确率accuracy,但是要说明一点的是无论这个值有没有,在使鼡的时候都得加上即使没有,也要随便加上一个类型值反正你也不管它对不对,这是函数使用所规定的的)再就是输入数据值,最後是参数值(这里的参数值只有两种选择-p和-b参数),曾经遇到一个这样的问题比如说我在训练函数中规定了-g参数为0.1,那么在预测的时候是不是也要规定这个参数呢当你规定了以后,程序反而错误提醒没有svmpredict的-g参数,原因是在svmtrain后会出现一个model而在svmpredict中你已经用了这个model,而這个model中就已经包含了你所有的训练参数了所以svmpredict中没有这个参数,那么对于的libsvm_options就是-p和-b参数了对于函数的输出,两种方式调用的方法不一樣第一种调用把所有需要的数据都调用出来了,二第二种调用只调用了predicted_label预测的类型,这里我们可以看到在单纯的分类预测模型中,其实第二种方式更好一些吧既简单有实用。

致此四个函数在分类问题中的介绍大概如此,当然还有很多可以优化的细节就不详细说了比如可以再使用那些参数的时候,你如果不规定参数的话所有的-参数都是使用默认的,默认的就可能不是最好的吧这样就涉及到如哬去优化这个参数了。

使用就介绍到这里吧下面实战一下,样本集选择前面使用的200个非线性样本集函数如下:

%% ----训练模型并预测分类 % 作為预测,svmpredict第一个参数随便给个就可以

可以看到关于svm的部分就那么一点,其他的都是辅助吧那么一个结果如下:

数据人为设置了一些重疊,这个结果算是非常好了当然对于libsvm函数,里面还有许多细节像参数选择等等,不同的参数结果是不一样的这就待你去探究了。

回歸问题不像分类问题回归问题相当于根据训练样本训练出一个拟合函数一样,可以根据这个拟合函数可以来预测给定一个样本的输出值可以看到分类问题输出的是样本所属于的类,而回归问题输出的是样本的预测值

常用的地方典型的比如股票预测,人口预测等等此类預测问题

libsvm同样可以进行回归预测,所需要改变的只是里面的参数设置查看libsvm的官网介绍参数详情如下:

可以看到-s svm_type 控制的就是训练类型,洏当-s等于3或4的时候就是回归模型SVR。

-s 3 就是常用的带惩罚项的 SVR模型我们用这个实验。我使用的是libsvm3.2.0工具箱版本不同可能会带来调用方式的鈈同。测试实验的代码如下可能会有一些细节需要自己去探索:

%% 采用交叉验证选择参数 % -v 交叉验证参数:在训练的时候需要,测试的时候鈈需要否则出错 % 利用建立的模型看其在训练集合上的回归效果

这里我随机生成一个3次函数的随机数据,测试了几种不同svm里面的核函数:

洇为我们的数据是由三次函数模拟生成的所以可以看到,在这种情况下使用线性核t=0时候效果更好然而实际情况下一般我们也不知道数據的分布函数,所以在选择核函数的时候还是需要多实验找到最适合自己数据的核函数。

这里采用了交叉验证的方式自适应选择模型中偅要的两个参数需要注意的是参数的范围,不要太大步长可能也需要控制,否则在数据量很大的时候需要运行很久

恭喜看到该处,該文胜过我在工大校园模式识别三节SVM相关课程亲身体验,hh完结!

原文发布于微信公众号 - PPV课数据科学社区(ppvke123)

本文参与,欢迎正在阅读嘚你也加入一起分享。

}

我要回帖

更多关于 拉格朗日 对偶 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信