在上篇文章《Support Vector Machine(1):线性可分集的决策边界》中,我们最后得到,求SVM最佳Margin的问题,转化为了如下形式:

到这一步后,我个人又花了很长的时间去查阅资料,因为数学较差的原因,理解起来相当慢,不过探索的乐趣也就在于不断的打破瓶颈向前,OK继续。上述的问题等价于:

而后我们引入广义拉格朗日函数,利用拉格朗日对偶性来求解此问题。首先明确一下,我们做这些工作的目的是,消去约束条件,为了好求解问题。广义拉格朗日函数为:

上式分为两部分,拉格朗日前辈的思路是,让后一项达到最大值,然后固定住,则问题等价于求前一项的最小值。既然我们想要消去条件(第二项),那么就要证明条件是没用的。也就是说,无论给不给出,这个条件都会成立,那必然就可以舍弃!所以说来,我们考虑,这个世界上只存在两种可能:

  

首先,我们考虑<1的情况,即不满足原问题的条件,则广义拉格朗日函数的第二项,其最大值会趋于无穷,那么我们没法求该式子的最小值,这个条件也就会被放弃!而在大于等于一的情况下,函数的第二项会趋向于0,也就是说,当我们求整个公式的最小值时,会天然的选择满足条件的一侧,从而将原问题转化为:

然后我们考虑下一个问题,对偶。刚才,我们先把着眼点放在第二项上,将其最大化,然后再将第一项最小化从而转化了原问题。那么,如果我们再看一下这个公式:如果将alpha视为常量(取为alpha'),然后将w和b作为变量来最小化这个函数,可知第二项小于等于第一次我们推导的公式。为什么,因为刚才我们把第二项做了max,而现在却是取为alpha',max>=any。也即:

现在确定了w和b,我们再将alpha'来做变换,取最大值,可知:

由此得到拉格朗日对偶问题(Lagrange Dual Problem)。

在一般条件下,,但在某些特殊情况下,二者却是等价的,这种情况叫做强对偶。而我们求解SVM的最佳边界,就要用强对偶下的KKT(Karush–Kuhn–Tucker conditions)条件来完成。KKT条件如下:

在第三个条件中,我们如果回想,g(w)是什么?可以依稀记得:

也就是说,此处令alpha>0即g(w)=0的解,是在我们的margin(s)上的,即它们就是support vectors

求解步骤:

1、固定住alpha,对w和b分别求偏导数,让其等于0:

带回之前的L,得到:

推导过程如下:

一定要注意x是转置的。为什么a和y不转置?因为a是常数呀,y呢?y是分类呀,-1或者1,所以无需转置。则问题转化为:

利用SMO继续求解的过程,请见:SMO算法

---------------------------------------------------------------------------------------------------------------------------------------

声明几点:

1、要特别感谢这篇文章:简易解说拉格朗日对偶(Lagrange duality),特别喜欢这种平易近人的数学讲解。

2、支持向量机通俗导论写的相当详尽,个人拜读了不下20遍,依然在继续学习中。

3、李航老师的《统计学习方法》中,也讲的很透彻。

我是个看到类似‘拉格朗日’这种字眼就害怕的人,拜谢前人的智慧和分享精神。

Support Vector Machine(2):Lagrange Duality求解线性可分SVM的最佳边界的更多相关文章

  1. Support Vector Machine(1):线性可分集的决策边界

    与Logistuc Regression相比,SVM是一种优化的分类算法,其动机是寻找一个最佳的决策边界,使得从决策边界与各组数据之间存在margin,并且需要使各侧的margin最大化.比较容易理解 ...

  2. 支持向量机(Support Vector Machine,SVM)—— 线性SVM

      支持向量机(Support Vector Machine,简称 SVM)于 1995 年正式发表,由于其在文本分类任务中的卓越性能,很快就成为机器学习的主流技术.尽管现在 Deep Learnin ...

  3. A glimpse of Support Vector Machine

    支持向量机(support vector machine, 以下简称svm)是机器学习里的重要方法,特别适用于中小型样本.非线性.高维的分类和回归问题.本篇希望在正篇提供一个svm的简明阐述,附录则提 ...

  4. 机器学习之支持向量机(Support Vector Machine)

    转载请注明出处:http://www.cnblogs.com/Peyton-Li/ 支持向量机 支持向量机(support vector machines,SVMs)是一种二类分类模型.它的基本模型是 ...

  5. 支持向量机 support vector machine

    SVM(support Vector machine) (1) SVM(Support Vector Machine)是从瓦普尼克(Vapnik)的统计学习理论发展而来的,主要针对小样本数据进行学习. ...

  6. 支持向量机SVM(Support Vector Machine)

    支持向量机(Support Vector Machine)是一种监督式的机器学习方法(supervised machine learning),一般用于二类问题(binary classificati ...

  7. 5. support vector machine

    1. 了解SVM 1. Logistic regression回顾 Logistic regression目的是从特征中学习出一个0/1二分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的 ...

  8. 机器学习算法 --- SVM (Support Vector Machine)

    一.SVM的简介 SVM(Support Vector Machine,中文名:支持向量机),是一种非常常用的机器学习分类算法,也是在传统机器学习(在以神经网络为主的深度学习出现以前)中一种非常牛X的 ...

  9. 机器学习技法总结(一):支持向量机(linear support vector machine,dual support vector machine)

    第一阶段技法: large margin (the relationship between large marin and regularization), hard-SVM,soft-SVM,du ...

随机推荐

  1. HDU 1009 FatMouse' Trade题解

    版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/.未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...

  2. Mysql8- Public Key Retrieval is not allowed

    在使用 MySQL 8.0 时重启应用后提示 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public ...

  3. 360CTF Re wp

    这比赛唯一的一道Re

  4. 【推荐系统】知乎live入门3.召回

    参考链接 [推荐系统]知乎live入门 目录 1. 概述 2. 画像过滤 3. 协同过滤 4. 内容过滤 5. 模型过滤 6. 其他过滤 7. 总结 ========================= ...

  5. 浅谈GC

    关于Java中的GC,简单来说就是垃圾收集器自动回收生命周期结束的对象,释放内存. 那么怎样确定对象是否存活呢? 可达性分析算法 现在主流的Java虚拟机大多使用这种可达性分析算法来判断对象是否需要进 ...

  6. C# 获取一个文件的MD5值

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...

  7. Linux–Nginx攻略

    什么是Nginx Nginx (“engine x”) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由Igor Sysoev为俄罗斯访问量第二的Ra ...

  8. 解压版(.zip)的MySQL数据库下载安装

    1.首先到mysql官网下载(https://dev.mysql.com/downloads/mysql/5.6.html#downloads): 2.解压下载好的压缩包文件,并将解压后的文件夹放到合 ...

  9. php内置函数分析之trim()

    官方手册中: 类似函数还有两个:ltrim() 和 rtrim().分别处理字符串的左侧.右侧. trim()的具体实现位于:ext/standard/string.c /* {{{ proto st ...

  10. HttpClientUtil工具类封装

    package com.jd.ng.shiro.utils; import org.apache.http.HttpEntity; import org.apache.http.HttpStatus; ...