前言

本文开始主要介绍一下SVM的分类原理以及SVM的数学导出和SVM在Python上的实现。借鉴了许多文章,会在后面一一指出,如果有什么不对的希望能指正。

一、 SVM简介

首先看到SVM是在斯坦福的机器学习课程上,SVM是作为分类器在logisticregression的基础上引出的。

其学习方法是把数据映射到一个高维空间上,使数据变稀疏,比较容易找到一个分割面来将数据分类,

而这个高维的分割面就是超平面。而SVM做的就是找到这样一个超平面使得数据点离这个超平面尽可能的远,

这样的分类效果才会好。

1、SVM起源Logistic回归(逻辑回归)

我也准备利用逻辑回归来引出SVM。首先我们要先理解什么是线性分类器,

线性分类器就是通过特征的线性组合作为自变量,

由于自变量的取值范围是负无穷到正无穷,因此通过sigmoid函数(这个函数的主要目的就是为了映射)映射到(0,1)上,

得到属于y =1的概率,概率超过50%就定义为y=1。

Logistic回归就是要学习得到θ,使得正例的特征远大于0,负例的特征远小于0,而且要在全部训练实例上达到这个目标。

这就是最简单的一个线性分类过程,关于Logistic的详细过程请看我的其他博文。

2、SVM的分类思想

为了看起来方便我们将SVM的思想从一个二维的空间解释,上面的红绿点表示了两类数据,

我们可以发现有很多的线(高维就是超平面)都可以将这两类分开,

但是哪一种才是最好的呢?SVM想的是找到这样一个超平面:尽量使得正例反例之间的间隔最大,

只希望离这个超平面近的点离平面越远越好,而不用所有点都离超平面很远,简单说就是只考虑局部就可以了。

那么怎么衡量这个间隔呢?就是求点到面的距离就可以。

3、为了引出SVM需要进行变形(本质上是为了看起来方便)

可以看出其实SVM也是一个找线性组合的系数的过程,因为系数的本质就是这个超平面。

为了进行SVM的计算我们要对Logistic提出的模型进行一些调整:

(1)把分类标签从(0,1)变到了(-1,1)(为什么后面会提到)

(2)将系数替换成w和b。 认为并替换为b,其他的变为w,

  也就是

(3)改变了映射函数: ,g()就是上面提到的映射函数,变成下面这种:

映射函数的目的就是为了让结果看上去更规整,其实真正起决定意义的还是的正负决定了分类结果。

所以简单的将映射函数定义为-1或是+1也就是说,现在除了标签变化外,与logistic回归并没什么太大区别。

4、间隔的计算

经过了上面的一些转换,我们开始尝试计算间隔。好多文章在讲解这一部分的时候都是讲了函数间隔(functional margin)和几何间隔(geometric margin),

我个人感觉这样讲有点舍近求远。首先先用一个例子先把函数都表示出来。下面是一个分类表达的图,超平面可以用一个分类函数表示,f(x)
=0表示x是处于超平面上的点,通过映射函数映射f(x)大于0被映射为y=+1,小于0则映射为y=-1。怎么表示分类正确呢?很明显只要y* f(x)是正的就可以了。

有了这个超平面的表达式我们就可以利用学过的知识计算点到平面的距离了。

把上面的公式去掉绝对值,定义到高维空间不难看出这其实就是:


为了达到上面公式中的绝对值效果,只要乘上y就可以了也就是:

上式得到的就是几何间隔,也就是点到平面的距离。分子上的就是函数间隔。

5、最优间隔分类器(optimal margin classifier)

我们已经得到了点到超平面距离的公式了,接下来就只要找到那个能够分割的超平面就可以了。前面已经说过,

只要数据点中离超平面最近的这个点离超平面远就可以(也就是其他点更远)。这其实是两个条件,一个是要max这

个最近距离,另一个约束条件是定义离超平面最近的点。

第一个目标函数可以定义为:

其中   

约束条件可以定义为:

这里解释一下这个约束条件,因为所有点对应的是同一个超平面,相对的w和b是不变的,所以只要比较函数

间隔就可以了。

进一步通过变量替换约束条件两边同时除以函数间隔也就是:

经过变换推倒一下,其实这个就是其他文章经常说的可以令函数间隔为1的原因,其实目的就是为了简化计算。

再将目标函数经过取倒数、平方等等价计算,这样就推出我们常见的SVM的格式:

这样的变化相对于前面未变化的表达来说有一个好处:这样是个典型的二次规划问题(目标函数是自变量的二次函数)

,就可以用软件求解了。

上面所有总结为下面的直观的表示,中间的实线就是寻找到的最优超平面,超平面到两条虚线的距离相等,

这个距离就是我们几何间隔,而虚线上的点就是我们说的支持向量,我们看出这些支持向量满足

(在函数间隔定义为1的情况下),而对于不是支持向量的点,满足约束条件,这时也看出来当时定

义标签为+1和-1比较直观。

注:我们虽然定义了标签为+1,-1但也不是必须这样,比如我们定义标签为a和b,但是只要对约束条件进行相应变化

就好将上面公式中提到的y变为

(y-(a+b)/2)*((b-a)/2)

就可以了,其实并没有什么本质改变。

主要参考了:

http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982639.html

http://blog.csdn.net/v_july_v/article/details/7624837      (最全面)

http://blog.csdn.net/zouxy09/article/details/17291543

转自:http://blog.csdn.net/woaidapaopao/article/details/52664833

(一)SVM原理的更多相关文章

  1. Support Vector Machine (1) : 简单SVM原理

    目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...

  2. 机器学习之支持向量机—SVM原理代码实现

    支持向量机—SVM原理代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9596898.html 1. 解决 ...

  3. SVM原理与实践

    SVM迅速发展和完善,在解决小样本.非线性及高维模式识别问题中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中.从此迅速的发展起来,已经在许多领域(生物信息学,文本和手写识别等)都取 ...

  4. SVM原理以及Tensorflow 实现SVM分类(附代码)

    1.1. SVM介绍 1.2. 工作原理 1.2.1. 几何间隔和函数间隔 1.2.2. 最大化间隔 - 1.2.2.0.0.1. \(L( {x}^*)\)对$ {x}^*$求导为0 - 1.2.2 ...

  5. 机器学习 | 深入SVM原理及模型推导(一)

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第32篇文章,我们来聊聊SVM. SVM模型大家可能非常熟悉,可能都知道它是面试的常客,经常被问到.它最早诞生于上世纪六 ...

  6. 支持向量机(SVM)原理详解

    SVM简介 支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机:SVM还包括核技巧, ...

  7. SVM原理简介

    本文只是简单介绍一下SVM的理论框架,想要详细了解当中细节问题处理可以参看后续章节或者网上各种详细资料.推荐Andrew Ng的斯坦福大学机器学习课程. 年代中期发展起来的基于统计学习理论的一种机器学 ...

  8. SVM原理(1)

    SVM即支持向量机,是一种机器学习内的二类分类方法,是有监督学习方法. 首先我们需要建立一个分类任务: 首先考虑线性可分的情况:(所谓线性可分就是在N维空间上的两类点,可以用N-1个未知数的函数(超平 ...

  9. 支持向量机SVM原理_python sklearn建模乳腺癌细胞分类器(推荐AAA)

    项目合作联系QQ:231469242 sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?cours ...

随机推荐

  1. Elastic-Job 分布式调度平台

    概述 referred:http://elasticjob.io/docs/elastic-job-lite/00-overview Elastic-Job是一个分布式调度解决方案,由两个相互独立的子 ...

  2. Two Sum - 新手上路

    不是计算机相关专业毕业的,从来没用过leetcode,最近在学习数据结构和算法,用leetcode练练手. 新手上路,代码如有不妥之处,尽管指出来. 今天抽空做的第一个题:Two Sum(最简单的呃呃 ...

  3. JAVA基础学习之路(九)[2]String类常用方法

    字符与字符串: 1.将字符数组变为字符串(构造方法) public String(char[] value) Allocates a new String so that it represents ...

  4. Throwable、Error、Exception、RuntimeException的区别与联系

    Throwable类是Java语言中所有错误和异常的超类.只有作为此类(或其子类之一)的实例的对象才被Java虚拟机抛出,或者可以被Java throw语句抛出.类似地,只有这个类或其子类之一可以是c ...

  5. 《linux内核分析》 第一周

    20135130  王川东 计算机是如何工作的? 计算机的基本原理是存储程序和程序控制.预先要把指挥计算机如何进行操作的指令序列(称为程序)和原始数据通过输入设备输送到计算机内存贮器中.每一条指令中明 ...

  6. Java微笔记(5)

    final关键字 super关键字

  7. HDU 5187 zhx's contest 快速幂,快速加

    题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5187 bc(中文): http://bestcoder.hdu.edu.cn/contes ...

  8. NFS 它的目的就是想让不同的机器、不同的作业系统可以彼此分享个别的档案啦

    NFS即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件, ...

  9. 结对编程学习fault、error、failure三种状态

    点滴成就 学习时间 新编写代码行数 博客量(篇) 学习知识点 第一周 10小时 0 0 了解软件工程 第二周 10小时 0 1 项目开题 第三周 15小时 0 1 开通博客.开展项目调查 第四周 20 ...

  10. laravel连接多个不同数据库的单例类

    在連接多個不同數據庫時,需要寫多個連接,爲了簡化該操作,可以使用該基類,不同的數據庫只要建立好相對應的類繼承該類,就可以使用ORM模型進行操作了. class singletonInstance { ...