本文申明本文原创如转载请注明原文出处

引言:上一篇我们讲到了logistic回归,今天我们来说一说与其很相似的svm算法,当然问题的讨论还是在线性可分的基础下讨论的。

很多人说svm是目前最好的分类器,那我们就来看看我们的svm好在哪里。

一:初识svm

问题:用一条直线把下图的圆球和五角星分离开来。

解答:有N种分法,如下图:

附加题:找出最佳分类?

解答:如图:

Exe me?鬼知道哪一条是最佳??

等等这个最佳分类是不是等价于,地主让管家给两个儿子分地,是不是只要让两家之间一样多就可以了?那是不是就是那根红线让两家距离之和离分界线最远就可以了?

恭喜你,猜对了。

现在我们把问题上升到N维,就是说,我也不知道这个N维是什么样子,但是,我要在N维中把这两个东东分离开来。那么从直线ax+b就可以表示成超平面WTx+b去分开。示意图如下:

其中W=(W1;W2;…;Wd)为法向量,决定了这个超平面的方向,b为位移项,决定了超平面与原点之间的距离。显然这个超平面就是被W和b确定的。那求出这个超平面这个分类模型不就建立了吗。那就是最优化求最大间隔的问题。

说到间隔(margin)问题,我们来科普下函数间隔和几何间隔。

1.1函数间隔(functional margin)

假设图中A,B,C表示三个实例,A离超平面最近,那么预测正确的可能性就比较低,但是C离超平面H最远,那么预测正确的概率就比较高,B介于两者之间。

一般来说,一个点到一个超平面的距离可以表示为这个点预测的确信程度。这就是函数间隔。

对于给定的训练数据集T和超平面(w,b),定义超平面关于样本点(x_i,y_i)的函数间隔为:

1.2 几何间隔

函数间隔可以表示预测的正确性以及确信度,但是当我们选择最优的超平面的时候,只有函数间隔还不够,主要按照比例改变W和b那么超平面没有变,但是函数间隔却变成了原来的两倍,我们可以对分离超平面的法向量进行约束,例如规范化,||w||=1,这样就使得间隔是确定的,这样函数间隔就变成了几何间隔。

假设B在这条分割线面上,分割线外的一点,到这个平面的距离用表示,任何一个点在这个超平面分割面上都有一个投影,现在假设,A的投影就是B,那么BA就是A到B的距离,w就是它的法向量,其中w/||w||为单位向量假设A(xi,yi那么B的x坐标为xi- w/||w||把B的横坐标带入wTX+b=0,得到:

进一步化简:

所以当||w||=1的时候,无乱扩大几倍,对距离都没有影响,这叫做几何距离。

1.3间隔最大化

现在我们知道分离超平面有无数个,但是几何间隔最大化只有一个,而SVM的思想就是寻找这个能让间隔最大化的超平面,把这个作为分类的标准。那么这个问题就可以表示成约束最优化问题:

s.t.

||w||=1

这里用||w||=1 规约 w,使得 + 是几何间隔,考虑到函数间隔和几何间隔的关系:

所以上述公式可以改写为:

s.t.

求上述的最大值,就等价于求||w||的最小值问题。等价于:

Min (w,b)

s.t.

好了终于到这一步了。

接下来介绍的是手工求解的方法了,一种更优的求解方法。

二:学习的对偶算法

为了求解线性可分的支持向量机的最优化问题,将它作为原始最优化问题,应用拉格朗日对偶性,求解对偶性问题去得到原始问题,这就是线性可分支持向量机的对偶算法。思想如图所示:

我想大家一看就会明白了。。。

补充(来自维基百科):

首先,我们定义拉格朗日函数,对每一个不等式的约束条件引进拉格朗日乘子ai>=0,i=1,2,3..,N,.则函数1为:

根据拉格朗日对偶性,原始问题的对偶问题是极大极小值问题:

那么为了得到对偶问题的解,需要先求L(w,b,a)的极小,再求对a的极大。

2.1求min L(w,b,a)

首先对函数1 分别对w,b求偏导并令其为0.

那么:

将上述两式带入到函数1可得:

即:

2.2求min L(w,b,a)对a的极大,即使对偶问题

这样就可以得到与之等价的对偶最优化问题:

现在对上式中a的解为a*=( a1*, a2*,…an*)T,因为满足KKT条件那么就可以求得最优化问题的解w*,b*.

综上,分类决策函数可以写成:

下期预告:下期将会为大家带来线性不可分的情况,也是SVM最核心的“核武器”以及svm的优缺点,敬请关注!

机器学习笔记—svm算法(上)的更多相关文章

  1. 机器学习笔记——SVM

    SVM(Support Vector Machine).中文名为 支持向量机.就像自己主动机一样.听起来异常神气.最初总是纠结于不是机器怎么能叫"机",后来才知道事实上此处的&qu ...

  2. 机器学习笔记----- ID3算法的python实战

    本文申明:本文原创,如有转载请申明.数据代码来自实验数据都是来自[美]Peter Harrington 写的<Machine Learning in Action>这本书,侵删. Hell ...

  3. 机器学习笔记--KNN算法2-实战部分

    本文申明:本系列的所有实验数据都是来自[美]Peter Harrington 写的<Machine Learning in Action>这本书,侵删. 一案例导入:玛利亚小姐最近寂寞了, ...

  4. 机器学习笔记--KNN算法1

    前言 Hello ,everyone. 我是小花.大四毕业,留在学校有点事情,就在这里和大家吹吹我们的狐朋狗友算法---KNN算法,为什么叫狐朋狗友算法呢,在这里我先卖个关子,且听我慢慢道来. 一 K ...

  5. 机器学习笔记—EM 算法

    EM 算法所面对的问题跟之前的不一样,要复杂一些. EM 算法所用的概率模型,既含有观测变量,又含有隐变量.如果概率模型的变量都是观测变量,那么给定数据,可以直接用极大似然估计法,或贝叶斯估计法来估计 ...

  6. 机器学习之SVM算法

    1.知识点 """ SVM,也称支持向量机:其优化核心为求取点到平面的距离最大化,主要是解决二分类问题 y = wx+b ,且 yi * y(i) >0 恒成立 思 ...

  7. Andrew Ng机器学习笔记+Weka相关算法实现(五)SVM最优间隔和核方法

    这一章主要解说Ng的机器学习中SVM的兴许内容.主要包括最优间隔分类器求解.核方法. 最优间隔分类器的求解 利用以一篇讲过的的原始对偶问题求解的思路,我们能够将相似思路运用到SVM的求解上来. 详细的 ...

  8. 机器学习中的算法(2)-支持向量机(SVM)基础

    版权声明:本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gma ...

  9. 转:机器学习中的算法(2)-支持向量机(SVM)基础

    机器学习中的算法(2)-支持向量机(SVM)基础 转:http://www.cnblogs.com/LeftNotEasy/archive/2011/05/02/basic-of-svm.html 版 ...

随机推荐

  1. C/C++浮点数在内存中的存储方式

    一.内存表示 任何数据在内存中都是以二进制的形式存储的,浮点数的表示是把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示,数的小数点位置随比例因子的不同而在一定范围内自由浮动.如下图是3 ...

  2. 2016款MACBOOK PRO触控条版 安装WIN10初体验 及 无奈退货记

    新的2016MBP终于发布了,作为把苹果电脑装WIN使用的人,等候很久之后,终于可以行动了. 黄山松 (Tom Huang) 发表于博客园http://www.cnblogs.com/tomview/ ...

  3. extjs学习资料

    ExtJs 入门教程 1.Extjs5.1.0教程云盘地址 http://pan.baidu.com/s/1qYhHiEw 2.Extjs3.x如下:   ExtJs 入门教程一[学习方法] ExtJ ...

  4. RabbitMQ服务安装配置

    RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发.RabbitMQ据说具有良 ...

  5. .NET 响应式自动缩略图服务器

    做互联网网站,总是会涉及到缩略图问题,之前一直是在上传图片时生成不同尺寸的缩略图,一直感觉又费力又不好管理,之后就写子 ThumbnailServer 用于部署一个图片服务器,在使用图片时才将图片转为 ...

  6. 报表开发工具Finereport移动端app js接口列表【全】

    应用报表工具Finereport的开发人员会发现其移动端app 同样也推出了很多js接口,那这些接口到底有多少,其移动端又有哪些地方支持调用js,这些接口具体又该如何调用呢.根据我平时的开发经验,给大 ...

  7. 读 [The Root of Lisp]

    首先,在对 Lisp 有一丢丢的了解下读这篇文章会大大激发你学下去的欲望.之后可以看作者的著作<ANSI Common Lisp>. 想要体会一下 Lisp 的强大,本文是不二之选. Co ...

  8. c++学习之容器细枝末节(2)

    从昨天到现在,还依然停留在容器的学习上,现在写例程代码顺手多了,看来写代码还是要多多练习才能有感觉. 经过一天的学习,有一下几点知识点让我觉得很有意义: (1)删除容器中的元素的时候,pop_fron ...

  9. Linux 进程间通讯详解六

    ftok()函数 key_t ftok(const char *pathname, int proj_id); --功能:创建系统建立IPC通讯 (消息队列.信号量和共享内存) 时key值 --参数 ...

  10. 仿原生app,native特效

    为解决手机端wap项目中页面跳转响应慢的问题,基于jquery开发了fr.routeApp.js,使得wap项目拥有原生app的流畅,跳转时亦有native的特效 html部分 <!--定义容器 ...