一、SVM的简介

  SVM(Support Vector Machine,中文名:支持向量机),是一种非常常用的机器学习分类算法,也是在传统机器学习(在以神经网络为主的深度学习出现以前)中一种非常牛X的分类算法。关于它的发展历史,直接引用Wikipedia中的,毕竟本文主要介绍它的推导过程,而不是历史发展。

  The original SVM algorithm was invented by Vladimir N. Vapnik and Alexey Ya. Chervonenkis in 1963. In 1992, Bernhard E. Boser, Isabelle M. Guyon and Vladimir N. Vapnik suggested a way to create nonlinear classifiers by applying the kernel trick to maximum-margin hyperplanes. The current standard[according to whom?] incarnation (soft margin) was proposed by Corinna Cortes and Vapnik in 1993 and published in 1995.

  接下来,就让我们回到过去,扮演它的发明者。(不要想太多,这个非常简单,只需基础的线性代数基础)

二、一个最简单的分类问题

  有如下几条直线,哪条是黑白两种点的最佳分割线?

  如果你看到了上面的那张图,你肯定会毫不犹豫的说是H3,因为H1明显没有满足要求,H2虽然分开了,但是给人的感觉没有那么好!如果现在在图中给你一个未知颜色的点,让你判断它是黑还是白,该如何判断?如果是我,我就会说如果这个未知点在H3左边的它就是黑色,如果他在H3的右边,他就是白色。

  如果到这儿你都完全理解,那么距离明白SVM就已经非常接近了。使用计算机程序寻找H3的过程,我们管它叫做训练;使用H3对未知点进行分类的过程,我们管它叫做预测。

  接下来,我们就需要知道计算机是如何找到H3这条线,和如何使用H3做出决策?(计算机不是人类,所以它不能靠感觉,而要编写计算机程序,则必须有一个严谨的算法过程。)

三、SVM推导

  首先,我们将上面寻找H3的问题转换一下,

  如上图,找到最佳的分割线,也就是让两条虚线之间的距离最大。

  首先我们假设这条分割线的法向量为,我们知道在直角坐标系中,任意一点都可以表示为一向量w · u则表示该向量在上投影的长度,对于任意一个正样本(设黑为+,白为-) 有w · u ≥ C,设b = C,则将其整理一下即可写为w · u - b ≥ 0, 如果已知w和b,使用此公式,我们便可对未知点进行预测(或者叫分类)。

  由上述,我们知道了决策过程,接下来,我们需要推导出训练过程,即怎样得到w和b?

  首先对于训练集,在训练集中对于任意一点xi 我们知道它的标签yi(如果为正例yi = 1,如果为负例yi = -1),然后对于正负例我们假设(假设当点刚好在边缘时等号成立), 不等式两边同乘以yi就可以得到

  两条虚线之间的宽度求法如下:

  即我们要做工作的是:

    

  即我们需要在的约束下(只需关注边界上的点),求。(这个问题,相信对于学过大学高等数学的人来说是非常简单的)

    使用拉格朗日乘数可以很容易的进行求解,

    设则:

    ,     

    将w回带到L中,

    

    化简得,

    

    注意上式的末尾,要使L取极值(画出决策边界),结果只与训练集中已知点向量的点积有关,与其它量无关。

    如果再将 带入到决策函数中,则

    if  

      result = +

    else

      result = -

  综上所述,可以发现,要求得最大间隔与对一个未知点的分类预测只与已知虚线点的点积有关。

四、核函数

  在上述中,最后的决策函数为,但这个决策函数对线性不可分的数据便无能为力了,比如:

  上图,不能简单的使用一条直线将其分开,但是,如果我们换个角度,

  对其多加一个维度Z,很容易便可将其用一条直线将其分开,如果我们再回到最开始的维度下,则其如下图所示,

  这也就告诉我们,在我们当前维度下线性不可分的数据,如果换个角度,则其就会线性可分。

  又由于决策函数为, 向量在二维z坐标系中,(这里的指的是向量在第一和第二维度上的值),假设在某个维度的点积,则其决策函数就可写为

,而.    (称K为核函数)

  通过上述两式就可画出最佳分割超平面,和对未知数据做出决策。

  常见的核函数有(摘自Wikipedia):

 注:大部分的机器学习任务使用这些核函数都可以得到解决。

机器学习算法 --- SVM (Support Vector Machine)的更多相关文章

  1. 支持向量机SVM(Support Vector Machine)

    支持向量机(Support Vector Machine)是一种监督式的机器学习方法(supervised machine learning),一般用于二类问题(binary classificati ...

  2. 机器学习经典算法笔记-Support Vector Machine SVM

    可供使用现成工具:Matlab SVM工具箱.LibSVM.SciKit Learn based on python 一 问题原型 解决模式识别领域中的数据分类问题,属于有监督学习算法的一种. 如图所 ...

  3. SVM (support vector machine)

    简单原理流程转自:http://wenku.baidu.com/link?url=57aywD0Q6WTnl7XKbIHuEwWENnSuPS32QO8X0a0gHpOOzdnNt_K0mK2cucV ...

  4. 支持向量机 support vector machine

    SVM(support Vector machine) (1) SVM(Support Vector Machine)是从瓦普尼克(Vapnik)的统计学习理论发展而来的,主要针对小样本数据进行学习. ...

  5. 使用Support Vector Machine

    使用svm(Support Vector Machine)中要获得好的分类器,最重要的是要选对kernel. 常见的svm kernel包括linear kernel, Gaussian kernel ...

  6. 支持向量机(Support Vector Machine,SVM)—— 线性SVM

      支持向量机(Support Vector Machine,简称 SVM)于 1995 年正式发表,由于其在文本分类任务中的卓越性能,很快就成为机器学习的主流技术.尽管现在 Deep Learnin ...

  7. 机器学习之支持向量机(Support Vector Machine)

    转载请注明出处:http://www.cnblogs.com/Peyton-Li/ 支持向量机 支持向量机(support vector machines,SVMs)是一种二类分类模型.它的基本模型是 ...

  8. Support Vector Machine(2):Lagrange Duality求解线性可分SVM的最佳边界

    在上篇文章<Support Vector Machine(1):线性可分集的决策边界>中,我们最后得到,求SVM最佳Margin的问题,转化为了如下形式: 到这一步后,我个人又花了很长的时 ...

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

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

随机推荐

  1. windows配置cider和clojure clj

    windows配置cider和clojure clj */--> pre.src {background-color: #292b2e; color: #b2b2b2;} windows配置ci ...

  2. Sequelize-nodejs-13-Working with legacy tables

    Working with legacy tables使用遗留表 While out of the box Sequelize will seem a bit opinionated it's triv ...

  3. Octave安装

    转自:https://www.cnblogs.com/freeweb/p/7124589.html Octave是一种解释类的编程语言,并且是GNU项目下的开源软件,与之相对是大家都非常熟悉的matl ...

  4. mysql 二进制日志binary log操作简单命令

    show master status \G; #查看当前正在记录的二进制日志 show binary logs; #查看binary log 所有文件列表 show binlog events; #查 ...

  5. 使用.Net Core MVC创建Web API

    创建.Net Core MVC 打开appsettings.json文件,添加数据库连接 { "Logging": { "LogLevel": { " ...

  6. Ajax的async属性

    Ajax请求中的async:false/true的作用 官方的解释是:http://api.jquery.com/jQuery.ajax/ async Boolean Default: true By ...

  7. 从公司服务器C盘被删说起

    事情起因 一个阳(严)光(重)明(雾)媚(霾)的周二,对于我们从周二到周六的班次来说,这是新的一周开始.我像往常一样,打开电脑,倒上一杯水,开始翻阅从大洋彼岸发来的各种邮件.突然看到一封紧急的邮件,内 ...

  8. nRF5282 资料链接帖子

    官方硬件设计参考

  9. VRRP虚IP漂移

    简介 VRRP 是 Virtual Router Redundancy Protocol 的简称,即 虚拟路由冗余协议 . 原文地址:https://linux-network-programming ...

  10. 2019年北航OO第1单元(表达式求导)总结

    2019年北航OO第1单元(表达式求导)总结 1 基于度量的程序结构分析 量化指标及分析 以下是三次作业的量化指标统计: 关于图中指标在这里简要介绍一下: ev(G):基本复杂度,用来衡量程序非结构化 ...