SVM原理简介
本文只是简单介绍一下SVM的理论框架,想要详细了解当中细节问题处理可以参看后续章节或者网上各种详细资料。推荐Andrew Ng的斯坦福大学机器学习课程。
年代中期发展起来的基于统计学习理论的一种机器学习方法,通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最小化,从而达到在统计样本量较少的情况下,亦能获得良好统计规律的目的。
简单的讲支持向量机(SVM)是一种分类模型,对于待分类的数据,我们总能找到一种超平面把它分割开来,当确立了这一超平面(下图a)后,我们要做的是最大化最近邻样例到平面的几何间隔γ(如下图b),这正是整个SVM算法所要解决的核心问题,即maxγ,我们列出了超平面的一般方程y=wx+b。

B点所在的
分割面。任何其他一点,比如A到该面的距离以
表示。

上文已经有提到我们的最终目的是最大化最小几何间隔min
,那我们怎么找到这个几何间隔呢? 根据上面得到的条件,我们可以得出这样一个优化式子:

这里的
是最小函数间隔,即任意点的函数间隔都要大于
,为了计算方便,我们调整w和b来规约
=1(这样做不会对计算结果有影响)。因此我们的式子改写成:

现在我们把问题转换成了二次规划带有线性约束的问题,我们来讨论拉格朗日对偶问题。
这是个不等式约束的极值问题求法

我们列出上述问题的一般化的拉格朗日公式:


这里的αβ是拉格朗日乘子, P代表primal。假设
或者
,那么我们总是可以调整
和
来使得
有最大值为正无穷。而只有g和h满足约束时,
为f(w)。这个函数的精妙之处在于
,而且求极大值。
因此我们可以写作

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

我们使用
来表示
。如果直接求解,首先面对的是两个参数,而
也是不等式约束,然后再在w上求最小值。这个过程不容易做,那么怎么办呢?
我们先考虑另外一个问题
D的意思是对偶,
将问题转化为先求拉格朗日关于w的最小值,将
和
看作是固定值。之后在
求最大值的话:

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

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

所以如果
满足了KKT,那么他们就是原问题和对偶问题的解。让我们再次审视公式(5),这个条件称作是KKT dual complementarity条件。这个条件隐含了如果
,那么
。也就是说,
时,w处于可行域的边界上,这时才是起作用的约束。而其他位于可行域内部(
的)点都是不起作用的约束,其
。这个KKT双重补足条件会用来解释支持向量和SMO的收敛测试。
介绍完对偶问题后,再回过头来看找出最优间隔分类器的问题:

从KKT条件得知只有函数间隔是1(离超平面最近的点)的线性约束式前面的系数
,也就是说这些约束式
,对于其他的不在线上的点(
),极值不会在他们所在的范围内取得,因此前面的系数
.注意每一个约束式实际就是一个训练样本。如下图虚线上的三个点支撑整个超平面的构成,故称它们为支持向量。

我们提出对偶问题的关键点是为了导出一个只包含内积
(输入特征空间中点的内积也可以表示成
)的公式,这一算法将在解决非线性分类时引用核函数(下文会有提及)其关键作用。
我们首先构建这个优化问题的拉格朗日公式

再来得出这一问题的对偶形式,先要最小化
,因此得到
关于w和b的偏导(固定拉格朗日乘子)


把上述结论带入原方程得到:

别忘了我是要最大化上面的这个方程:

因此:

这也达到了我们先前提到的目标,导出一个只包含内积
这一位置量的公式,其中y为类型的标签,如:要分类的类别为两类则y取+1或-1,至于拉格朗日乘子的求解涉及到后续文章所要提及的内容,所以索性放在后面讲了。
SVM原理简介的更多相关文章
- storm 原理简介及单机版安装指南——详细版【转】
storm 原理简介及单机版安装指南 本文翻译自: https://github.com/nathanmarz/storm/wiki/Tutorial 原文链接自:http://www.open-op ...
- Support Vector Machine (1) : 简单SVM原理
目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...
- Java进阶(二十四)Java List集合add与set方法原理简介
Java List集合add与set方法原理简介 add方法 add方法用于向集合列表中添加对象. 语法1 用于在列表的尾部插入指定元素.如果List集合对象由于调用add方法而发生更改,则返回 tr ...
- kafka原理简介并且与RabbitMQ的选择
kafka原理简介并且与RabbitMQ的选择 kafka原理简介,rabbitMQ介绍,大致说一下区别 Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和 ...
- 机器学习之支持向量机—SVM原理代码实现
支持向量机—SVM原理代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9596898.html 1. 解决 ...
- InheritableThreadLocal类原理简介使用 父子线程传递数据详解 多线程中篇(十八)
上一篇文章中对ThreadLocal进行了详尽的介绍,另外还有一个类: InheritableThreadLocal 他是ThreadLocal的子类,那么这个类又有什么作用呢? 测试代码 p ...
- Nginx 负载均衡原理简介与负载均衡配置详解
Nginx负载均衡原理简介与负载均衡配置详解 by:授客 QQ:1033553122 测试环境 nginx-1.10.0 负载均衡原理 客户端向反向代理发送请求,接着反向代理根据某种负载机制 ...
- Nginx 反向代理工作原理简介与配置详解
Nginx反向代理工作原理简介与配置详解 by:授客 QQ:1033553122 测试环境 CentOS 6.5-x86_64 nginx-1.10.0 下载地址:http://nginx. ...
- Linux DNS原理简介及配置
Linux DNS原理简介及配置 DNS简介 DNS原理 域名解析的过程 资源记录 DNS BIND安装配置 一.简介 一般来讲域名比IP地址更加的有含义.也更容易记住,所以通常用户更习惯输入域名来访 ...
随机推荐
- python list去重的方法
转载于:http://yxmhero1989.blog.163.com/blog/static/112157956201381443244790/ Python很简洁 我们喜欢简单有效的代码 一. ...
- C#基础(WinForm窗体的单例模式,避免窗体被实例化多次)
在MDI窗体中使用单例模式可以有效的避免同个窗体被实例化多次 [csharp] view plain copy //==============字窗体的修改================ // ...
- linux 免交互状态下修改用户密码
当利用某些工具对linux用户进行远程密码更改时,输入[ passwd 用户名 ] 后需要输入两次密码, 但是如果你利用的某些工具无法与linux进行交互的情况下,就没办法变更用户密码了,这个时候可以 ...
- Android Handler传递参数动态更新UI界面demo
package com.example.demo_test; import android.app.Activity; import android.os.Bundle; import android ...
- OpenCV源码阅读(3)---matx.h---学习心得
在.h文件里定义类,可以通过内联函数的方法完成类基础函数的实现,这样就不需要额外写.cpp文件来写类的内容. 对于操作符重载,可以使用返回应用的方式减小内存开销 _Tp& someclass: ...
- Intellij Idea 创建EJB项目入门(一)
相关软件: 1.JBoss(jboss-as-7.1.1.Final):http://jbossas.jboss.org/downloads 2.Intellij IDEA 13.02 3.JDK 1 ...
- 内存泄露了么: Handlers & Inner Classes
看到一篇关于handler和匿名类关于内存泄露的文章,觉得不错,充分发挥拿来主义,先放这儿看着! From:http://www.androiddesignpatterns.com/2013/01/i ...
- C#实现Comparable接口实现排序
C#中,实现排序的方法有两种,即实现Comparable或Comparer接口,下面简单介绍实现Comparable接口实现排序功能. 实现Comparable接口需要实现CompareTo(obje ...
- GIT使用教程与基本原理
转自:http://blog.csdn.net/wengpingbo/article/details/8985132 说明:该教程全部图片都来自于<pro git>.以下所有的操作,除非特 ...
- Ubuntu 64位系统安装StarUML之最佳实践
preview 相信很多使用Ubuntu的哥们在安装StarUML或者其他软件时都会遇到要求libgcrypt11的依赖.而遗憾的时,这个东西很多人根本找不到. 我将它分享到百度网盘,mark. 一. ...