概述

支持向量机是一种二分类模型,间隔最大使它有别于感知机。支持向量机学习方法由简至繁的模型:线性可分支持向量机(linear support vector machine in linearly separable data),线性支持向量机(linear support vector machine),非线性支持向量机(non-linear support vector machine). 简单模型是复杂模型的基础,也是复杂模型的特殊情况。当训练数据线性可分的时候,通过硬间隔最大化(hard margin maximization)学习一个线性分类器,也就是线性可分支持向量机。当训练数据近似线性可分的时候,我们通过软间隔最大化(soft margin maximization)学习一个线性分类器,即线性支持向量机。当数据线性不可分时,通过核技巧和软间隔最大化,学习非线性支持向量机。

线性可分支持向量机和硬间隔最大化

首先对于我们的数据集合假定为是线性可分的,也就是说存在那么一条直线(或者超平面)可以将我们的数据集按照类别的不同分开。如下图所示

从上图我们可以知道这条黑色的线(在多维空间是一个超平面)可以将不同类别的点分开来。
但是我们知道,一般情况下,当数据线性可分的条件下,这样的超平面很大程度上不是只存在一个,而是很多个, 我们使用什么标准来从中选择一个最优的超平面呢?那就是分类平面到两侧的距离越远代表着分类的效果越好。简单解释一下原因是距离越远代表着我们的容错率越高。比如我们的训练集合中的数据和测试集合中的数据特性有着些许差别,超平面到点的距离越近,代表着这个差别对分类效果的影响越大,所以只有尽可能的扩大这个距离,才能让我们的分类超平面的效果在测试集合上越好。
这就引出来了SVM,换句话来讲,SVM的学习策略就是使得间隔最大化,同时将求解超平面的问题转化为一个凸二次规划问题的求解。
线性可分支持向量机: 给定线性可分数据集,通过间隔最大化求解二次凸规划问题得到的超平面为:\(w^{T}x+b=0\) 以及相应的分类决策函数为: \(f(x)= sign(w^{T}x+b)\). 我们称之为线性可分支持向量机.

几何间隔:

假设对于一个点\(x\),令其垂直投影到超平面上的对应点为\(x_{0}\), \(w\)是垂直于超平面的一个法向量, \(\gamma\). 根据平面几何知识,有\[ x=x_{0}+\gamma \frac{w}{||w||}\].因为\(x_{0}\)是超平面上的一点,所以满足\(w^{T}x_{0}+b=0\). 然后让 \(x=x_{0}+\gamma \frac{w}{||w||}\)的两边同时乘上\(w^{T}\).根据\(w^{T}x_{0}=-b和w^{T}w=||w||^{2}\),可以得到:\(\gamma=\frac{w^{T}x+b}{||w||}\).随后我们为了得到绝对值,从而得到几何间隔: \(\frac{|w^{T}x+b|}{||w||}\)

SVM的二次规划求解超平面问题(原始模式)

对于训练数据集来讲:\[D=\{x_{n},y_{n}\}^{N}_{n=1},x_{n}\in R^{d},y_{n}\in\{-1,+1\}\]
正如上面所讲的,我们需要找到一个最优平面,我们使用距离的最大化来确定最优平面的\(w和b\).
我们知道从\(x_{n}\)这个点到到超平面的距离是:\[d=\frac{|w^{T}x_{n}+b|}{||w||}\].
超平面两侧点到面的距离和为:\[\min\limits_{x_{n},y_{n}=-1} d+\min\limits_{x_{n},y_{n}=+1} d\]
\[\Rightarrow \min\limits_{x_{n},y_{n}=-1} \frac{|w^{T}x_{n}+b|}{||w||} + \min\limits_{x_{n},y_{n}=+1} \frac{|w^{T}x_{n}+b|}{||w||}\]
\[\Rightarrow \frac{1}{||w||}( \min\limits_{x_{n},y_{n}=-1} |w^{T}x_{n}+b| + \min\limits_{x_{n},y_{n}=+1} |w^{T}x_{n}+b|)\]
\[\Rightarrow \frac{2}{||w||}\]

现在我们得到目标函数:\[max \frac{1}{||w||} \space\ s.t., y_{i}(w^{T}x_{i}+b)\geq1,i=1,2...,n\]
我们将求\(\frac{1}{||w||}\)的最大值问题转化为求\(\frac{||w||^{2}}{2}\)的最小值的问题,即\[min \frac{||w||^{2}}{2} \space\ s.t., y_{i}(w^{T}x_{i}+b)\geq1,i=1,2...,n\].
所以现在问题就转化成了一个凸优化的问题(目标函数是二次函数,约束条件是线性的),对于这种问题我们可以使用任何一种凸优化的运算工具得到结果。
上一种情况是在线性可分的情况下进行的SVM,如果是非线性可分的情况,我们需要做的就是讲\(x\)映射到高维空间,即\(z_{n}=\phi(x_{n})\),然后将\(\phi(n)\)带入到二次规划求解的问题中就可以。

SVM对偶模式求解最优超平面

除了用解决QP问题的常规方法之外,我们还可以通过求解对偶问题得到最优解,这就是线性可分条件下的支持向量机的对偶运算。这种运算的优先在于:一更加的简洁,二自然的引入核函数,推广到非线性分类的问题。
在这个过程中,我们使用的是Lagrange duality 变换到对偶变量的优化问题,通过给每一个约束条件加上一个Lagrange Multiplier,也就是引入拉格朗日乘子\(\alpha\)
\[\mathcal{L}(w,b,\alpha)=\frac{||w||^{2}}{2}-\sum_{i=1}^{n}\alpha_{i}(y_{i}(w^{T}x_{i}+b)-1)\]
\[SVM \equiv \min\limits_{b,w} (\max\limits_{\alpha_{n}\geq0}\mathcal{L}(w,b,\alpha))=p^{*}\]
随后我们将min和max对换位置:
\[\min\limits_{\alpha_{n}\geq0}\mathcal{L}(w,b,\alpha))=d^{*}\]
交换位置之后的新问题是原始问题的对偶问题,这个问题的最优值用\(d^{*}\)来表示,他表示原始问题最优值\(p^{*}\)的下限。在满足强对偶条件下,两者去取等号。所以这时候的问题就变成了先对w,b求极小值,在对\(\alpha\)求极大值。

对偶问题的3个步骤:
(1)首先固定\(\alpha\), 分别对w,b 求偏导数
\(\frac{\partial \mathcal{L}}{\partial w} =0 \Rightarrow w= \sum_{i=1}^{n}\alpha_{i}y_{i}x_{i}\)
\(\frac{\partial \mathcal{L}}{\partial b} =0 \Rightarrow \sum_{i=1}^{n}\alpha_{i}y_{i }=0\)
将这两个结果带回到$ \mathcal{L}(w,b,\alpha)$得到如下结果:
\(-\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_{i}\alpha_{j}y_{i}y_{j}x_{i}^{T}x_{j}+\sum_{i=1}^{n}\alpha_{i}\)

(2)得到上面的式子之后,我们发现拉格朗日函数中只含有一个变量,那就是\(\alpha_{i}\),接下来我们就可以去求最优问题:
\[\max\limits_{\alpha} \space\ -\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_{i}\alpha_{j}y_{i}y_{j}x_{i}^{T}x_{j}+\sum_{i=1}^{n}\alpha_{i}\]
\[s.t. \sum_{i=1}^{n}y_{i}\alpha_{i}=0 \space\ \alpha_{i}\geq0 i=1,2,...,n\]
这也是一个二次规划问题,我们使用程序可以得到结果

线性支持向量机与软间隔最大化

数据近似线性可分,说明有一部分数据不线性可分,为了解决这个问题,我们对于每个点都引入一个松弛变量\(\xi_[i]\geq 0\),从而约束条件变成了\(y_{i}(w^{T}x_{i}+b\geq 1-\xi_{i}\). 目标函数也就\(frac{1}{2}||w||^{2}\)变为了\(frac{1}{2}||w||^{2}+C\sum_{i=1}^{N}\xi_{i}\). 在这里我们把\(C>0\)称为惩罚参数,一般由应用问题决定。当C值大时,对误分类点的惩罚增大,当C值小时,对误分类点的惩罚减小. 这时候就可以进行同上的操作,最后得到函数:\[\max\limits_{\alpha} \space\ -\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_{i}\alpha_{j}y_{i}y_{j}x_{i}^{T}x_{j}+\sum_{i=1}^{n}\alpha_{i}\] \[s.t. \sum_{i=1}^{n}y_{i}\alpha_{i}=0 \space\ 0\leq\alpha_{i} \leq C i=1,2,...,n \]

核函数Kernel

我们知道对于线性条件下SVM具有原始模式和对偶模式,都可以求出最优解,我们为什么还要提出来对偶模式呢?这就是为了解决在原始空间非线性的情况。
一般来说,对于非线性情况,我们的常用做法是把样例特征映射到高维空间中去(如上文2.2节最开始的那幅图所示,映射到高维空间后,相关特征便被分开了,也就达到了分类的目的);
但是如果高维空间维度太大,这个时候我们就需要将核函数用在对偶SVM上,简化运算。
对核函数的具体讲解可以参考这里核函数
对SVM的三重理解

【机器学习算法基础+实战系列】SVM的更多相关文章

  1. 【机器学习算法基础+实战系列】KNN算法

    k 近邻法(K-nearest neighbor)是一种基本的分类方法 基本思路: 给定一个训练数据集,对于新的输入实例,在训练数据集中找到与该实例最邻近的k个实例,这k个实例多数属于某个类别,就把输 ...

  2. SpringBoot基础实战系列(二)springboot解析json与HttpMessageConverter

    SpringBoot解析Json格式数据 @ResponseBody 注:该注解表示前端请求后端controller,后端响应请求返回 json 格式数据前端,实质就是将java对象序列化 1.创建C ...

  3. SpringBoot基础实战系列(一)整合视图

    SpringBoot整合freemarker 1.添加依赖:springboot基本上是无缝衔接,基本上只需要添加对应的依赖,不需要或者做很少量的配置即可 注:对于springboot项目的创建此处不 ...

  4. SpringBoot基础实战系列(三)springboot单文件与多文件上传

    springboot单文件上传 对于springboot文件上传需要了解一个类MultipartFile ,该类用于文件上传.我此次使用thymeleaf模板引擎,该模板引擎文件后缀 .html. 1 ...

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

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

  6. 机器学习算法基础(Python和R语言实现)

    https://www.analyticsvidhya.com/blog/2015/08/common-machine-learning-algorithms/?spm=5176.100239.blo ...

  7. 【机器学习算法-python实现】svm支持向量机(3)—核函数

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/gshengod/article/details/24983333 (转载请注明出处:http://b ...

  8. 机器学习算法的Python实现 (1):logistics回归 与 线性判别分析(LDA)

    先收藏............ 本文为笔者在学习周志华老师的机器学习教材后,写的课后习题的的编程题.之前放在答案的博文中,现在重新进行整理,将需要实现代码的部分单独拿出来,慢慢积累.希望能写一个机器学 ...

  9. Spark入门实战系列--8.Spark MLlib(上)--机器学习及SparkMLlib简介

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .机器学习概念 1.1 机器学习的定义 在维基百科上对机器学习提出以下几种定义: l“机器学 ...

随机推荐

  1. CSS的框模型(div)与边距(margin、padding)

    所谓框模型,例如div标签,你就可以直接把它理解成一个相框. 这个相框里面的相片有高度和宽度,框本身也有一定的宽度.相框和别的相框之间,还有一定的边距. div设置常见属性 border:边框 pad ...

  2. 关于th,td,tr的一些相关标签

    tr表示行,td表示列,th其实也是表示列但是在这个标签中的文字会以粗体出现 <th>为表格标题,属性summar为摘要, <caption>标签为首部说明, <thea ...

  3. 什么是css sprites,如何使用?

    css sprites:精灵图(雪碧图):把一堆小图片整合在一张大图上,通过背景图片相关设置(背景图片.背景图是否重复.背景图定位),显示图片,减轻服务器对图片的请求数量 优点: 1.减少网页的HTT ...

  4. Python模块入门(一)

    一.模块介绍 模块就是一系列功能的集合体 模块有三种来源: 1.内置模块:python内提供的模块 2.第三方模块:由第三方提供的模块 3.自定义模块:自行定义的模块 模块的格式: 1.使用pytho ...

  5. [持续更新] Linux基础的重要命令

    命令总结:100个左右 mkdir 方法一 [root@localhost ~]# mkdir /test && ls -ld /test 方法二 [root@localhost ~] ...

  6. Dojo 学习笔记 之 Dojo hitch&partial

    原文: http://dojotoolkit.org/documentation/tutorials/1.10/hitch/index.html 版本: Dojo 1.10 为了更好地使用JavaSc ...

  7. Android's Media

    MediaService.Main #include <sys/types.h> #include <unistd.h> #include <grp.h> #inc ...

  8. MySQL子查询有哪五种形式?

    MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下产品.MySQL是最流行的关系型数据库管理系统之一,在web应用方面,MySQL是最好的RDBMS(Rela ...

  9. 笨办法学Python(十四)

    习题 14:提示和传递 让我们使用 argv 和 raw_input 一起来向用户提一些特别的问题.下一节习题你会学习如何读写文件,这节练习是下节的基础.在这道习题里我们将用略微不同的方法使用 raw ...

  10. NWERC 2013 - J (codeforces gym - 100405J)

    题目描述:给你一颗二叉树,保证每个点要么是叶子节点,要么有左右两个儿子.某些叶子节点上放着灯,请你移动最少的灯,使得整棵树平衡 对平衡的定义:对于树上的每个点左右儿子中灯数的差的绝对值≤1,那么这棵树 ...