SVM-支持向量机原理详解与实践之一

目录(?)[+]

  1. 前言
  2. SVM机器学习与深度学习
    1. 人工智能领域
    2. 机器学习与深度学习
    3. SVM简介
  3. SVM原理分析
    1. 快速理解SVM原理
    2. 线性可分和线性不可分
    3. 函数间隔和几何间隔
    4. 超平面分析与几何间隔详解
    5. 二次最优化

SVM-支持向量机原理详解与实践

  1. 前言

去年由于工作项目的需要实际运用到了SVM和ANN算法,也就是支持向量机和人工神经网络算法,主要是实现项目中的实时采集图片(工业高速摄像头采集)的图像识别的这一部分功能,虽然几经波折,但是还好最终还算顺利完成了项目的任务,忙碌一年,趁着放假有时间好好整理并总结一下,本文的内容包括:前面的部分是对支持向量机原理的分析,后半部分主要直接上手的一些实践的内容。

本文的原理部分针对支持向量机的原理,特别拉格朗日对偶性,求解拉个拉格朗日函数,以及和函数与核技巧再到软间隔和正则化等重要内容做了一些讨论。

实践部分的目标则是通过对实践时碰到的问题,调参的过程的讲解可以对前半部分讲解的SVM原理部分的内容有一个更深入的了解。

  1. SVM、机器学习与深度学习

    1. 人工智能领域

大数据人工智能的时代,深度学习可以说火得一塌糊涂。美国硅谷的大公司都在布局着这个领域,而中国国内,腾讯,百度,阿里巴巴等等知名企业也都在这个领域争先发力,2017年初,百度迎来陆奇-前微软全球执行副总裁,人工智能领域世界级的权威,要知道百度还有人工智能大牛Andrew Ng – 吴恩达。所有迹象表明人工智能必然是继互联网之后的全球各大公司甚至国家必争的高地。

  1. 机器学习与深度学习

由于深度学习在大数据预测能力上的卓越表现,当下出现了深度学习是否会替代传统机器学习算法并淘汰他们的讨论,但是另一方面,大多数人仍然相信深度学习不会代替其他的模型或者算法。对于大多数的应用,像一些简单的算法如逻辑回归、支持向量机表现的已经很不错了,使用深度学习会让问题复杂化。

深度学习是可以应用到大部分领域的,但是就像前面说的,深度学习并非所有问题的最优方案,如果你的工作中有用到机器学习算法,你可以尝试传统的机器学习算法,也可以达到很好的效果。虽然现在已经有一些工作去把各领域的知识融入到深度学习中的,但这并不能完全替代原有的。

上图是一个关于机器学习算法的时间线来自于Eren Golge

就像在20世纪早期SVM一样,深度学习会成为主流,但首先深度学习应当解决其在大数据需求及复杂性方面的问题,这样它才会成为人们的第一选择。

  1. SVM简介

SVM(support vector machine)简单的说是一个分类器,并且是二类分类器。

  • Vector:通俗说就是点,或是数据。
  • Machine:也就是classifier,也就是分类器。

SVM作为传统机器学习的一个非常重要的分类算法,它是一种通用的前馈网络类型,最早是由Vladimir N.Vapnik 和 Alexey Ya.Chervonenkis在1963年提出,目前的版本(soft margin)是Corinna Cortes 和 Vapnik在1993年提出,1995年发表。深度学习(2012)出现之前,SVM被认为是机器学习中近十几年最成功表现最好的算法。

  1. SVM原理分析

    1. 快速理解SVM原理

很多讲解SVM的书籍都是从原理开始讲解,如果没有相关知识的铺垫,理解起来还是比较吃力的,以下的一个例子可以让我们对SVM快速建立一个认知。

给定训练样本,支持向量机建立一个超平面作为决策曲面,使得正例和反例的隔离边界最大化。

决策曲面的初步理解可以参考如下过程,

  1. 如下图想象红色和蓝色的球为球台上的桌球,我们首先目的是找到一条曲线将蓝色和红色的球分开,于是我们得到一条黑色的曲线。

图一.

2) 为了使黑色的曲线离任意的蓝球和红球距离(也就是我们后面要提到的margin)最大化,我们需要找到一条最优的曲线。如下图,

图二.

3) 想象一下如果这些球不是在球桌上,而是被抛向了空中,我们仍然需要将红色球和蓝色球分开,这时就需要一个曲面,而且我们需要这个曲面仍然满足跟所有任意红球和蓝球的间距的最大化。需要找到的这个曲面,就是我们后面详细了解的最优超平面。

4) 离这个曲面最近的红色球和蓝色球就是Support Vector。

  1. 线性可分和线性不可分

线性可分-linearly separable, 在二维空间可以理解为可以用一条直线(一个函数)把两类型的样本隔开,被隔离开来的两类样本即为线性可分样本。同理在高维空间,可以理解为可以被一个曲面(高维函数)隔开的两类样本。

线性不可分,则可以理解为自变量和因变量之间的关系不是线性的。

实际上,线性可不分的情况更多,但是即使是非线性的样本通常也是通过高斯核函数将其映射到高维空间,在高维空间非线性的问题转化为线性可分的问题。

  1. 函数间隔和几何间隔

  • 函数间隔functional margin: 给定一个训练样本有:

函数间隔代表了特征是正例或是反例的确信度。

  • 几何间隔 geometrical margin:

向量点到超平面的距离(其中后面详细介绍)

  1. 超平面分析与几何间隔详解

前面已经对SVM的原理有了一个大概的了解,并且简单介绍了函数间隔和几何间隔的概念,为了更好的理解线性可分模式下超平面,以下将进行深入的剖析推导过程,我们假设有训练样本集,期望的响应为,这里我们用类+1和类-1来代表,以表明样本是线性可分的。

决策曲面方程如下:

其中

x:输入向量,也就是样本集合中的向量;

w:是可调权值向量,每个向量可调权值;

T:转置,向量的转置;

b:偏置,超平面相对原点的偏移。

根据逻辑回归定义展开其实就是:

其中假设约定,于是替换成b;则有:

(T是转置)所以有:

这里假设模式线性可分:

线性可分模式下最优超平面的示意图如下:

如上图所示:

  • 为分离边缘,即超平面和最近数据点的间隔。如果一个平面能使最大,则为最优超平面。
  • 灰色的方形点和原形点就是我们所说的支持向量。

假设和向量和偏置的最优解,则最优超平面的函数为:

相应的判别函数是:

以下是点x到最优超平面的二维示意图:

由上图可知r 为点x到最优超平面的距离:

那么代数距离是如何得到的呢?通过将带入

可以得到r,其中:

  • 为x在最优超平面的正轴投影,
  • 因为在平面上

下面给出一种更为简单且直观的理解:

首先我们必须要知道Euclidean norm范数,即欧几里德范数(以下用w表示多维的向量):

再参考点到面的距离公式

也就是

类似的,扩展到多维的w向量也是一样,代数距离r类似于d,而

类似于 ,所以展开后也就是:

对比点平面的公式,以上的r也就多维度空间向量的到最优超平面的距离。

再看上图,如果x = 0 即原点则有

那么是如何得到的呢?很简单,如上面分析的

因为x = 0,它在原点,它与任意可调权值向量w相乘都等于0,于是有:

注意b为偏置,只是决定了决策曲面相对原点的偏离,结合上图我们可知道:

  • b > 0 则原点在最优超平面的正面;
  • b < 0 则原点在最优超平面的负面;
  • b = 0 则原点就在最优超平面上。

找到的这个最优超平面的参数, 于是在样本向量集中, 有一对一定满足(因为是常数,它只是决定了决策曲面相对原点的偏离):

满足上式的点就是则为支持向量,这些点距离决策曲面也就时超平面最近,时最难区分的点。于是根据点到超平面的距离公式:

在超平面的正面和负面我们有任一支持向量满足代数距离:

如果让表示两个分离边缘的最优值,则根据上式有:

所以我们可以看出,如果要使得最大,则就必须使得最小,也就可以总结为:

最大化两个类之间的分离边缘等价于最小化权值向量w的欧几里得范数。

  1. 二次最优化

回头看我们前面提到的,给定一个训练集,我们的需求就是尝试找到一个决策边界使得几何间隔最大,回归到问题的本质那就是我们如何找到这个最大的几何间隔? 要想要最大化间隔(margin),正如上面提到的:

最大化两个类之间的分离边缘等价于最小化权值向量w的欧几里得范数

即:

其中: 也就是前面提到的函数间隔:,回顾几何间隔:,约束条件就是让函数间隔等于几何间隔。

或是将优化的问题转化为以下式子:

其中,就是将函数间隔和几何间隔联系起来。

我们发现以上两个式子都可以表示最大化间隔的优化问题,但是我们同时也发现无论上面哪个式子都是非凸的,并没有现成的可用的软件来解决这两种形式的优化问题。

于是一个行之有效的优化问题的形式被提出来,注意它是一个凸函数形式,如下:

以上的优化问题包含了一个凸二次优化对象并且线性可分,概括来说就是需找最优超平面的二次最优化,这个优化的问题可以用商业的凸二次规划代码来解。

凸函数:

在凸集中任取两个点连成一条直线,这条直线上的点仍然在这个集合内部,左边

凸函数局部最优就是全局最优,而右边的非凸函数的局部最优就不是全局最优了。

下面要具体介绍的拉格朗日对偶性,它可以引导我们到优化问题的对偶形式,因为对偶形式在高维空间有效的运用核(函数)来得到最优间隔分类器的方法中扮演了非常重要的角色。对偶形式让我们得到一个有效的算法来解决上述的优化问题并且相较通用的二次规划商业软件更好。

优化问题的对偶形式的方法简单来说就是通过Lagrange Duality变换到对偶变量 (dual variable)的优化问题之后,应用拉格朗日对偶性,通过求解对偶问题得到最优解,这就是线性可分条件下支持向量机的对偶算法,这样做的优点在于:

  • 一是原问题的对偶问题往往更容易求解
  • 二者可以自然的引入核函数,进而推广到非线性分类问题。
时间: 2024-10-10 20:30:24

SVM-支持向量机原理详解与实践之一的相关文章

SVM -支持向量机原理详解与实践之四

SVM -支持向量机原理详解与实践之四 SVM原理分析 SMO算法分析 SMO即Sequential minmal optimization, 是最快的二次规划的优化算法,特使对线性SVM和稀疏数据性能更优.在正式介绍SMO算法之前,首先要了解坐标上升法. 坐标上升法(Coordinate ascent) 坐标上升法(Coordinate Ascent)简单点说就是它每次通过更新函数中的一维,通过多次的迭代以达到优化函数的目的. 坐标上升法原理讲解 为了更加通用的表示算法的求解过程,我们将算法表

SVM -支持向量机原理详解与实践之二

SVM -支持向量机原理详解与实践之二 SVM原理分析 以下内容接上篇. 拉格朗日对偶性(Largrange duality)深入分析 前面提到了支持向量机的凸优化问题中拉格朗日对偶性的重要性. 因为通过应用拉格朗日对偶性我们可以寻找到最优超平面的二次最优化, 所以以下可以将寻找最优超平面二次最优化(原问题),总结为以下几个步骤: 在原始权重空间的带约束的优化问题.(注意带约束) 对优化问题建立拉格朗日函数 推导出机器的最优化条件 最后就是在对偶空间解决带拉格朗日乘子的优化问题. 注:以上这个四

SVM -支持向量机原理详解与实践之三

SVM -支持向量机原理详解与实践之三 什么是核 什么是核,核其实就是一种特殊的函数,更确切的说是核技巧(Kernel trick),清楚的明白这一点很重要. 为什么说是核技巧呢?回顾到我们的对偶问题:     映射到特征空间后约束条件不变,则为:     在原始特征空间中主要是求,也就是和的内积(Inner Product),也称数量积(Scalar Product)或是点积(Dot Product),映射到特征空间后就变成了求,也就是和的映射到特征空间之后的内积,就如我前面所提到的在原始空间

图像处理中的数学原理详解15——数列的极限

欢迎关注我的博客专栏"图像处理中的数学原理详解" 全文目录请见 图像处理中的数学原理详解(总纲) http://blog.csdn.net/baimafujinji/article/details/48467225 图像处理中的数学原理详解(已发布的部分链接整理) http://blog.csdn.net/baimafujinji/article/details/48751037 数学是图像处理技术的重要基础.在与图像处理有关的研究和实践中无疑需要用到大量的数学知识,这不免令许多基础薄

深度学习原理详解及Python代码实现

深度学习框架如Tensorflow和Pytorch等为用户提供了可供调用的API,但也隐藏了深度学习底层的实现细节. 为方便大家更加深入地理解深度学习原理并了解其底层实现方法,特此推出了<课程深度学习原理详解及Python代码实现>.期望能"掀起你的盖头来,让我看看你的模样",为深度学习进一步的优化和创新打下根基. 课程链接:https://edu.51cto.com/course/21426.html 本课程详细讲解深度学习原理并进行Python代码实现.课程内容涵盖感知

图像处理中的数学原理详解17——卷积定理及其证明

欢迎关注我的博客专栏"图像处理中的数学原理详解" 全文目录请见 图像处理中的数学原理详解(总纲) http://blog.csdn.net/baimafujinji/article/details/48467225 图像处理中的数学原理详解(已发布的部分链接整理) http://blog.csdn.net/baimafujinji/article/details/48751037 1.4.5   卷积定理及其证明 卷积定理是傅立叶变换满足的一个重要性质.卷积定理指出,函数卷积的傅立叶变

Java虚拟机工作原理详解

原文地址:http://blog.csdn.net/bingduanlbd/article/details/8363734 一.类加载器 首先来看一下java程序的执行过程. 从这个框图很容易大体上了解java程序工作原理.首先,你写好java代码,保存到硬盘当中.然后你在命令行中输入 [java] view plaincopy javac YourClassName.java 此时,你的java代码就被编译成字节码(.class).如果你是在Eclipse IDE或者其他开发工具中,你保存代码

kickstart安装系统原理详解

前言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装. 常规的办法有什么? 光盘安装系统===>一个服务器DVD内置光驱百千块,百台服务器都配光驱就浪费了,因为一台服务器也就开始装系统能用的上,以后用的机会屈指可数.用USB外置光驱,插来插去也醉了. U盘安装系统===>还是同样的问题,要一台一台服务器插U盘. 网络安装系统(ftp,http,nfs) ===>这个方法不错,只要服务器能联网就可以装系统了

Storm概念、原理详解及其应用(一)BaseStorm

本文借鉴官文,添加了一些解释和看法,其中有些理解,写的比较粗糙,有问题的地方希望大家指出.写这篇文章,是想把一些官文和资料中基础.重点拿出来,能总结出便于大家理解的话语.与大多数"wordcount"代码不同的是,并不会有如何运行第一storm代码等内容,只有在运行完代码后,发现需要明白:"知其然,并知其所以然". Storm是什么?为什么要用Storm?为什么不用Spark? 第一个问题,以下概念足以解释: Storm是基于数据流的实时处理系统,提供了大吞吐量的实