SVM(Support Vector Machine)有监督的机器学习方法,可以做分类也可以做回归。SVM把分类问题转化为寻找分类平面的问题,并通过最大化分类边界点距离分类平面的距离来实现分类。

有好几个模型,SVM基本,SVM对偶型,软间隔SVM,核方法,前两个有理论价值,后两个有实践价值。下图来自龙老师整理课件。

基本概念

线性SVM,线性可分的分类问题场景下的SVM。硬间隔。

线性不可分SVM,很难找到超平面进行分类场景下的SVM。软间隔。

非线性SVM,核函数(应用最广的一种技巧,核函数的选择十分重要)。

SVR(支持向量回归)。可以做回归。

SVC,用SVM进行分类。

一、硬间隔的支持向量机

假设函数:可以与LR类比,只是外面是套的符号函数,wx+b>0认为是正类,wx+b<0认为是负类。

损失函数:

从中挑选出最好的能分离黑点点和白点点的直线(分离边界),是硬间隔所要解决的问题。

直观上:我们认为处在两个样本正中间的位置的分离边界最好。理论上,对训练样本的局部扰动的容忍性最好,鲁棒性最好,泛化能力好。几何上,两类支持向量的中间垂面。

几何上:如下图所示,当考虑样本的误差增大时(认为所有样本的误差一样大),能完全分开圈圈和叉叉的直线减少。下图第一排等价于下图第二排。其实支持向量就是被下面那行胖胖的线穿过的点,只是这些点在高纬空间中对应着向量,所以叫支持向量。优化的目标就是找到一条最胖的线,刚好穿过我们的样本,同时又能把所有样本分离开,而那条胖胖线的中垂线,就是我们要找的直线,其实这样是考虑容错率,计算真实的样本测量错了,仍然能够分隔开;最胖的线左边和右边的距离就叫做间隔。间隔空间之内没有任何样本,即硬间隔。线的左边是一类样本,线的右边是另一类样本。

数学上:

那条中垂线:WtX+b=0,根据假设函数而来,既不为正,也不为负值。Wt为超平面法向量,法向量实际上就是与中垂线垂直的那个方向(想想b是标量,求解x,实际上能看出w与x就是垂直的,即内积,只是这里叫法向量)。b为原点到超平面的有向距离的放缩。w/|w|*x实际上就是内积,几何上就是投影(点到线的距离)。如果w和b同时放缩任意比例,原超平面不变。所以可以同时除以||w||。

圈圈到超平面的距离,是胖胖线的一半r。叉叉到超平面的距离也是胖胖线的一半,但是是负向 -r。任意一点到超平面的距离大于r时,yi等于+1,属于正类,任意一点到超平面的距离小于-r时,属于负类。而我们的目标就是最大化r 同时要满足,将两类进行分割,所以有如下约束条件,具体如下。

在此基础上,不妨另1/|W|=r,可以简化目标函数。其实损失函数就是对最优化的理解、对误差的理解、对数据的理解,根据这些而设计出来的。

而最终目标函数的求解,是一个在一次约束下,求二次最优的过程,即一个典型的凸二次规划问题,所以肯定是可以求解的,对偶方法可以求解。

综合以上SVM的推导过程如下:首先假设是线性可分的,由此我们有一定的几何判断和认识,基于该几何判断和认识下,通过逆推法,我们假设找到了这个最优的分离边界,应该满足哪些特点,包括需要知道点到面的几何距离的概念,变量又比较多,最终通过一个减少变量法,然后就得到了优化目标函数。

因为原问题为凸优化,所以原问题的凸优化问题与拉格朗日函数鞍点(又不是最大值又不是最小值,梯度是0的点),对偶函数(转化为对w,b求导)的凸优化问题的解一致。之所以还转化为对偶,就是为了好求。原问题是拉格朗日函数,在固定了w,b条件下,最大拉格朗日系数α条件下求解拉格朗日函数最小。对偶问题,是固定α,最小化w,b,这样通过求导可以算出w,b与α之间的关系,进而将目标函数转化为只有α,y,x。

根据KKT条件可知,需要满足yi*f(xi)=1,而满足这个条件的点,就是上文提到的支持向量点,f(x)是假设函数。

假设函数只与支持向量有关,更加体现了几何意义。SVM不受那种离分隔边界很远的极值点的影响,哪怕有个很远的叉叉点,对分离边界也不会有影响,而逻辑回归则会受影响

硬间隔的局限性:

不一定分类完全正确的超平面最好

样本数据本身线性不可分

二、软间隔的支持向量机

正因为由上面硬间隔支持向量机的局限性,才有了软间隔支持向量机,一般实际中都不会用硬间隔,因为一般都不可能完全线性可分。软间隔支持向量机考虑了在间隔中间的点,以及间隔外被错分类的点,这些点都是支持向量点,都要计算损失函数。而之前硬间隔是要找到完全分开的分隔边界。

上面的损失函数,除以C可以类比于逻辑回归的损失函数,左边是正则项,右边是hinge损失函数(当>1则没有任何损失,当<1则有损失)。C越小考虑的点越多。C越大是硬间隔。

与上文一样,根据拉格朗日,用α表示w,b,求解损失函数最小:

看KKT条件,得出以下结论:

三、 核函数

核函数处理线性不可分问题。核函数目的就是使得线性不可分的问题,用非线性的边界更好的分离开。

核函数即为下图的,把原来的x映射到高纬空间的,原来可能是10维*10维,映射到高维空间可能是100维*100维,但通过kernel技巧,两个高维的内积可以转化为低维x的内积,大大简化了计算。核函数就是为了映射到高维空间求内积而产生的,而我们上面的提到分离边界要是曲线,就必须是高维,而同时我们的损失函数就是内积的一个函数,所以这就完美的解决了上面的问题呢~把上面wx+b都可以转化为w+b。在原来样本做一个无穷维的空间映射,再做分类。下图为多项式核。

另一个应用广泛的核函数(径向基核函数,也称为高斯核)如下,可以映射到无限高维空间。

四、 LRSVM的异同

相同:都可以做分类;假设函数都是连续、线性的wx+b,只是一个在外面套了simoid函数,一个套了sign函数;正则项处理方式类似。

不同:SVM要考虑支持向量本身,而逻辑回归是不只考虑支持向量,而考虑所有点。损失函数不一样,一个叫对数几率损失函数,一个是hinge损失函数。支持向量机要用对偶法,逻辑回归没必要用对偶法。硬间隔的SVM,的损失函数是有约束条件下的凸优化问题(所以不能用梯度下降法,而要考虑对偶法等考虑约束的最优化求解方法),而逻辑回归是没有约束条件下的凸优化问题(所以可以用梯度下降法,走到的一定是最优点)。逻辑回归比较好解释,SVM没有那么好解释。

在线性边界情况,LR与SVM效果差不多,在非线性分离边界,SVM由于有核技巧,所以分得会更好点,但也有可能过拟合,核函数的选择时关键而且很复杂。

优点:可以解决小样本下机器学习问题;提高泛化性能;可以解决文本分类、文字识别、图像分类等方面受欢迎;避免神经网络结构选择和局部极小值问题。

缺点:缺失值敏感;内存消耗大,难以解释。

Python

在Python中SVM包天生就带了正则,而LR需要自己添加正则,如果不加的化鲁棒性会差。

SVC中的参数,C就是损失函数里面那个C;class_weigh是类别的权重;kernel选择核函数;最大迭代次数-1指的是无穷大;probability是否需要输出概率形式;tol损失函数要收敛到一个合适的值,前后两个损失函数的差距小于tol就收敛。

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

  1. 【IUML】支持向量机SVM

    从1995年Vapnik等人提出一种机器学习的新方法支持向量机(SVM)之后,支持向量机成为继人工神经网络之后又一研究热点,国内外研究都很多.支持向量机方法是建立在统计学习理论的VC维理论和结构风险最 ...

  2. 机器学习:Python中如何使用支持向量机(SVM)算法

    (简单介绍一下支持向量机,详细介绍尤其是算法过程可以查阅其他资) 在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别.分类(异 ...

  3. 以图像分割为例浅谈支持向量机(SVM)

    1. 什么是支持向量机?   在机器学习中,分类问题是一种非常常见也非常重要的问题.常见的分类方法有决策树.聚类方法.贝叶斯分类等等.举一个常见的分类的例子.如下图1所示,在平面直角坐标系中,有一些点 ...

  4. 机器学习算法 - 支持向量机SVM

    在上两节中,我们讲解了机器学习的决策树和k-近邻算法,本节我们讲解另外一种分类算法:支持向量机SVM. SVM是迄今为止最好使用的分类器之一,它可以不加修改即可直接使用,从而得到低错误率的结果. [案 ...

  5. 机器学习——支持向量机(SVM)之拉格朗日乘子法,KKT条件以及简化版SMO算法分析

    SVM有很多实现,现在只关注其中最流行的一种实现,即序列最小优化(Sequential Minimal Optimization,SMO)算法,然后介绍如何使用一种核函数(kernel)的方式将SVM ...

  6. 支持向量机 (SVM)分类器原理分析与基本应用

    前言 支持向量机,也即SVM,号称分类算法,甚至机器学习界老大哥.其理论优美,发展相对完善,是非常受到推崇的算法. 本文将讲解的SVM基于一种最流行的实现 - 序列最小优化,也即SMO. 另外还将讲解 ...

  7. coursera机器学习-支持向量机SVM

    #对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...

  8. 支持向量机(SVM)入门

    一.简介 支持向量机,一种监督学习方法,因其英文名为support vector machine,故一般简称SVM. 通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器, ...

  9. Stanford机器学习---第八讲. 支持向量机SVM

    原文: http://blog.csdn.net/abcjennifer/article/details/7849812 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回 ...

随机推荐

  1. Windows下几款免费C/C++开发工具简介

    我相信作为编程初学者,我们都希望有好用的编程软件.这里"好用"应该至少要满足两点:1.安装简单,2.使用方便.大神移驾,对工具有特殊偏好跳过,从来不用Windows的止步.本文不做 ...

  2. 移动端WEB开发,click,touch,tap事件浅析

    一.click 和 tap 比较 两者都会在点击时触发,但是在手机WEB端,click会有 200~300 ms,所以请用tap代替click作为点击事件. singleTap和doubleTap 分 ...

  3. pg_stat_statements

    Functions pg_stat_statements_reset() returns void pg_stat_statements_reset discards all statistics g ...

  4. IOKit找不到问题定义

    Xcode511下Undefined symbols for architecture armv7s:  "_IOMasterPort", referenced from:     ...

  5. hihoCoder #1301 : 筑地市场 (打表+构造)

    题目大意:问含有4或者7的第k大的正数是多少. 题目分析:1~10.1~100.1~1000...之间的含有4或者7的个数可以求出,这样就可以从高位到地位依次确定这个数的每一位上的值. 代码如下: # ...

  6. TKinter布局之grid 网格布局

    1.由于我们的程序大多数都是矩形,因此特别适合于网格 布局,也就是 grid 布局. 2.使用 grid 布局的时候,我们使用 grid 函数,在里面指 定两个参数,用 row 表示行,用 colum ...

  7. js 鼠标上移 图片放大

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. ◆◆◆◆◆◆◆◆◆◆◆linux下软件包的管理◆◆◆◆◆◆◆◆◆◆◆◆◆◆

    查看与制定的路径名相匹配的软件包 [root@localhost certs]# which ls alias ls='ls --color=auto' /bin/ls [root@localhost ...

  9. 双十一运维怎么过,OneAPM 帮你救火,轻松运维

    一年一度的双十一来了 有人剁手买买买,有人愁眉苦脸抱着服务器哭 对,说的就是你,汪 苦逼的运维工程师双十一怎么过来的? 守着电脑看预警还是通宵加服务器扩容 还是帮女朋友守着购物车等着一键清空 或者 今 ...

  10. css文本换行你所不知道的技巧

    前言:这是最近翻译的一篇文章 我在header标签开头忘里边加入一个span标签的时候,有一点小问题.我总是想确保在span标签之前能够换行.明确地讲,在标签前边加入<br> 并没有什么错 ...