(整理自AndrewNG的课件,转载请注明。整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/

SVM(Support Vector Machines)系列会循序渐进地给大家讲解支持向量机,内容有点多,打算分四篇博文介绍。SVM是最好的有监督学习算法之一,它有很多忠实的fans,执着地认为它就是最好的。为了讲述SVM,我们从线性可分数据开始(后来会去掉线性可分的约束),引出Margin(间隔)的概念;接下来会讨论optimal margin classifier(最忧间隔分类器),过渡到拉格朗日的对偶问题;我们还会介绍kernels(核函数),通过它SVM可以解决高维问题(甚至是无限维);最后我们会介绍SMO算法,这是实现SVM的有效算法。

1 函数间隔(function margin)和几何间隔(geometric margin)

1.1直观理解

为了引出间隔的概念,我们先来回顾一下logistic 回归,Logistic回归目的是从特征学习出一个0/1分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷。因此,使用logistic函数(或称作sigmoid函数)将自变量映射到(0,1)上,映射后的值被认为是属于y=1的概率。

假设函数:

,其中的特征向量,是logistic函数。 的函数图像如下:

,可以看到从负无穷到正无穷映射到

我们令:表示输入变量被映射为y=1的概率。

对于输入变量,如果,也就是,我们则判断y=1。否则,判断y=0。

考虑一个y=1对应的样本,越大,则越大,越接近1,那么我就对我们的判断更加自信,换言之,y=1的置信度越大。直觉上理解,要想让我们的Logistic回归置信度很高,应该满足以下下条件:

这里是通过训练集学习出来的边界条件,也就是对于任意的输入变量,的值离边界都很远,我们认为这是一个很好的分类器,我们就将这个差值定义为函数间隔。

为了更好的理解,请看下图:

,图中的直线是通过算法学习出的判决边界,新输入三点A、B、C,要求我们对其进行分类,显然都可以进行分类。但是若要问你那个点被正确分类的置信度最大,是A,因为它离边界的距离最远,B次之,我们对C的分类的置信度是最低的。这里的点到判决直线的距离就是几何间隔。

1.2 符号定义

上面只是直观地介绍了函数间隔和几何间隔,为了更加正式地定义间隔的概念,我们需要重新定义一下有关的Notation:

在明确一下需要解决的问题:对于二值分类问题,输入变量,目标变量是类的标号,确定线性分类器。与Logistic回归不同,我们用表示类别的标号,用表示分类器:,其中,其中

,对于给定的通过这样的假设函数,输出变量就是1或-1,而省略了Logistic回归计算概率的中间过程。

1.3 正式定义

对于一个给定的训练样本,我们定义的函数间隔:

时,为了使函数间隔尽量大,要为正且尽量大;当时,为了使函数间隔尽量大,要为负且尽量小。

另外,对于一个输入样本,若,我们认为分类正确。

我们刚才定义的函数价格是针对单个样本的,现在定义对于整个训练集的函数间隔:

,就是距离判决边界最近的点对应的函数间隔。

那我们用函数间隔来衡量线性分类器的性能怎么样?假如我们的分类面为,那么把缩放任意倍数,分类面不会发生变化,但函数间隔却发生了变化。例如:,分类面仍为为,但函数间隔却变为,扩大了2倍,所以用函数间隔来衡量分类器并不合理。为此引入几何间隔的概念。

先看下图:

,样本点的几何间隔就是样本点到分类面(分类线)的几何距离,如图中线段AB。

求解AB乃简单的几何问题:已知,用表示几何间隔,w是分类面的法向量,则以求得B点,又因为B点在分类面上,满足方程:,所以有:

解方程得到:

这是对于的情况,对于我们得到

,写到一起:

注意两点:(1)当时,几何间隔和函数间隔相等;

(2)等比缩放,几何间隔不变。

同样定义对与整个训练集的集合间隔:

,就是距离判决边界最近的点对应的几何间隔。

2 最优间隔分类器(The optimal margin classifier)

对于给定的样本集,我们假设其是线性可分的,就是可以找到合适的超平面(hyperplane),将正类和负类正确的分开。我们如何找到这个超平面,从而使对于整个训练集的几何间隔最大,则优化问题可描述如下:

,目标函数是使几何间隔最大化,约束为全局的几何间隔应该是所有样本几何间隔中最小的,使

的值为几何间隔。到此分类器的模型已经确定,就差求参数了。

但是有点问题,是个非凸的约束,不利于用现有的工具求解,需要将此约束转化一下,于是有了如下形式:

,就是将目标函数和约束都转换成了关于函数间隔的,但注意这只是形式上的转换,我们的目的还是最大几何间隔。

约束是凸约束啦,糟糕,目标函数又非凸啦,那就再转换一下。假如我们求得了,和对应的几何间隔,我们缩放不会改变分类面和几何间隔,就是说对分类性能没有影响。那我们就可以调整,令函数间隔,不会影响计算结果,目标函数

,使目标函数最大化等价于使最小化,所以将问题转化为:

。这就是最优间隔分类器的最终形式。目标函数和约束都是凸函数啦,可以利用QP软件来求解啦。

总结一下:这部分的思路还是比较清楚,为了引出间隔的概念,先回顾了Logistic回归,并给了函数间隔和几何间隔的概念。以几何间隔为目标函数学习分类面,给出最优分类器的基本形式,但不利于求解,所以经过两部形式转换,将目标和约束都转换成凸函数,可用QP求解。注意,这不是我们的终极目的,接下来我们还会介绍更优的算法来求解最优间隔分类器的问题。

SVM(支持向量机)(一)的更多相关文章

  1. 机器学习实战 - 读书笔记(06) – SVM支持向量机

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第6章:SVM 支持向量机. 支持向量机不是很好被理解,主要是因为里面涉及到了许多数学知 ...

  2. Python实现SVM(支持向量机)

    Python实现SVM(支持向量机) 运行环境 Pyhton3 numpy(科学计算包) matplotlib(画图所需,不画图可不必) 计算过程 st=>start: 开始 e=>end ...

  3. SVM支持向量机的基本原理

    SVM支持向量机的基本原理 对于很多分类问题,例如最简单的,一个平面上的两类不同的点,如何将它用一条直线分开?在平面上我们可能无法实现,但是如果通过某种映射,将这些点映射到其它空间(比如说球面上等), ...

  4. 6-11 SVM支持向量机2

    SVM支持向量机的核:线性核.进行预测的时候我们需要把正负样本的数据装载在一起,同时我们label标签也要把正负样本的数据全部打上一个label. 第四步,开始训练和预测.ml(machine lea ...

  5. 6-10 SVM支持向量机1

    都是特征加上分类器.还将为大家介绍如何对这个数据进行训练.如何训练得到这样一组数据. 其实SVM支持向量机,它的本质仍然是一个分类器.既然是一个分类器,它就具有分类的功能.我们可以使用一条直线来完成分 ...

  6. SVM 支持向量机算法-实战篇

    公号:码农充电站pro 主页:https://codeshellme.github.io 上一篇介绍了 SVM 的原理和一些基本概念,本篇来介绍如何用 SVM 处理实际问题. 1,SVM 的实现 SV ...

  7. [分类算法] :SVM支持向量机

    Support vector machines 支持向量机,简称SVM 分类算法的目的是学会一个分类函数或者分类模型(分类器),能够把数据库中的数据项映射给定类别中的某一个,从而可以预测未知类别. S ...

  8. paper 25 :SVM支持向量机是什么意思?

    转载来源:https://www.zhihu.com/question/21094489 作者:余洋链接:https://www.zhihu.com/question/21094489/answer/ ...

  9. 【机器学习算法-python实现】svm支持向量机(1)—理论知识介绍

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景      强烈推荐阅读(http://www.cnblogs.com/jerrylead/archiv ...

  10. SVM 支持向量机

          学习策略:间隔最大化(解凸二次规划的问题) 对于上图,如果采用感知机,可以找到无数条分界线区分正负类,SVM目的就是找到一个margin 最大的 classifier,因此这个分界线(超平 ...

随机推荐

  1. java字符串输出

    package mytest; public class Mycode { public static void main(String[] args){ String[]seasons = {&qu ...

  2. xzzx

    创建包: CREATE OR REPLACE PACKAGE WYL_TEST_PKG_GGYW_XZZX IS -- Purpose : 公共业务-参保险种注销 --注销选择的险种,并将参保缴费信息 ...

  3. 计算ptd

    因为公司的IC扫描sensor的频率常常和adapter中的noise频率重叠,导致IC接收到的数据出错.所以我们经常会用示波器看adapter的Noise,再用傅里叶变换找到相应应该回避的频段,包括 ...

  4. NET Core 1.0

    VS Code从零开始开发调试.NET Core 1.0 使用VS Code 从零开始开发调试.NET Core 1.0. .NET Core 是一个开源的.跨平台的 .NET 实现. VS Code ...

  5. 编译原理Tiny语言的定义

    Here is the definition for Tiny language The Tiny lexicon is as follows: Keywords:   IF ELSE WRITE R ...

  6. linux下C++开发工具

    就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样.Emacs, vi, eclipse, anjuta,kd ...

  7. 重装系统后搭建php环境

    重装系统后,不需要重新下载php,apache,mysql的程序包,只需要在命令行重新安装即可. 1.安装apache: 打开命令行 cd 程序目录\bin httpd -k install 按ent ...

  8. ZOJ 3607贪心算法

    http://blog.csdn.net/ffq5050139/article/details/7832991 http://blog.watashi.ws/1944/the-8th-zjpcpc/ ...

  9. iOS开发之自己封装一个progressHUD控件

    看了几个轻量级的progress view 我觉得KVNProgress做的最漂亮吧 突然我想为什么我自己不封装一个控件 然后我研究了一下KVNProgress KVN简单的界面是由storyboar ...

  10. WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)[实现篇]

    原文:WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)[实现篇] 元数据的导出就是实现从ServiceEndpoint对象向MetadataSet对象转换的过程,在WCF元数据框 ...