摘要:

  1.算法概述

  2.算法推导

  3.算法特性及优缺点

  4.注意事项

  5.实现和具体例子

  6.适用场合

内容:

1.算法概述

  其基本模型定义为特征空间上的间隔最大的线性分类器,即支持向量机的学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。

或者简单的可以理解为就是在高维空间中寻找一个合理的超平面将数据点分隔开来,其中涉及到非线性数据到高维的映射以达到数据线性可分的目的。

模型函数是;其中w(n维),b待定

2.算法推导

2.1几个基本概念:

2.1.1 函数间隔(function margin):

   单个样本i的函数间隔:,y取值{-1,1} ,W是参数向量,b是截距(这个margin越大,表示分类越confident )

   整个样本的函数间隔:,即最小的样本函数间隔(整体的margin由最近的那个决定的 )

2.1.2 几何间隔(geometric margins):

   单个样本i的几何间隔:(对functional margin做了norm L1归一化)

   整个样本的几何间隔:

2.1.3 凸二次优化(convex optimization)问题(目标函数是结构风险最小化的):

   (最小化几何间隔r,并约束函数间隔rhat为1转化而来)

  深入:凸集凸函数andrew ng如何推导转化成的凸优化问题

2.1.4 核函数(Kernels function):

   引入核函数的目的:将非线性数据映射到高维的线性数据,以达到数据线性可分(<x,z> => k<x,z>)

  核函数计算公式:

  几种常见的核函数:

    polynomial kernel(多项式核):

    Gaussian kernel(高斯核):

  深入:证明核函数是valid

2.2 带约束条件的最优化解法:

2.2.1 拉格朗日乘数法(Lagrange Multiplier)

  应用问题:拉格朗日乘数法是用来解决极值问题的,其将一个有n个变量与m个约束条件的最优化问题转换为一个有n + m个变量的方程组的极值问题

既有等式,也有不等式的约束,称为generalized Lagrangian

  其中,(拉格朗日因子)

  令偏导=0,  

   解出w和拉格朗日算子a,β,求出f(w)的极值 

 深入:维基百科介绍

2.2.2 KKT(Karush-Kuhn-Tucker)约束条件

  在满足KKT条件下,可以将原始问题等价于对偶问题,即d* = p*。

  当原问题是凸优化问题时,KTT是原始问题能有最优化解的一个必要和充分条件

  

  深入:维基百科介绍KKT条件介绍(这个比较接地气)

2.3问题求解:

2.3.1 原始问题定义:

  (基于上面拉格朗日乘数法的符号说明),设定对应的解为p*

2.3.2 对偶问题定义:

   (就是交换了原始问题的min,max;并且令w为常量,a,b为变量),设定对应的解为d*

    

    在满足KKT条件下,可以将原始问题转化为对偶问题,即d* = p*。

2.3.3 简述推导过程:

  由2.1.3 凸二次优化(convex optimization)问题得到不等式约束:,凸优化函数为f(w) =(原始凸优化问题定义)

   下面就来求解dual问题: (可以尝试证明满足KKT条件)

   和上面讨论的广义拉格朗日 相比,注意符号上的两个变化, w变量 =>w,b两个变量 ;只有α,而没有β,因为只有不等式约束而没有等式约束

   运用拉格朗日乘数法分别对w,b求导:

   对w求导得 

  

  对b求导得

  现在把9,10,代入8,得到具体推导参见)

  

  于是有(第一个约束本来就有,第二个约束是对b求偏导得到的结果):

  

  最终得到如下的解:

  

  (平移到正负支持向量的中间位置为最佳)

  具体的ai求解释通过SMO算法求得的

2.2.4 SMO(序列最小优化算法)

对偶优化问题:

,其中C是正则化系数(先上链接,有时间再补软间隔这部分

a1,a2看做变量,其他为常量,(19)变换为:

现在把α1和α2的约束用图表示出来,要保持约束就只能在这条线上移动,并且要满足a1<C 
所以a2的取值在[L,H]

继续变换得:

代入目标函数:

问题是这样求出的极值点不一定在[L,H]的范围内

所以有,在范围内最好,不在范围内的话,也需要clip到范围内

最终得a1,a2的解:

3.算法特性及优缺点

  特性:支持向量是SVM的训练结果,在SVM分类决策中起决定作用的是支持向量。SVM学习问题可以表示为凸优化问题,因此可以利用已知的有效算法发现目标函数的全局最小值。而其他分类方法(如基于规则的分类器和人工神经网络)都采用一种基于贪心学习的策略来搜索假设空间,这种方法一般只能获得局部最优解。(参考自);基于结构风险最小化

  优点:泛化错误率低,计算开销不大(基于结构风险最小化,使用了||w||正则项)。

    高维空间下或特征维数大于样本数时仍有效(不能大得太多),小样本训练集上能够得到比其它算法好很多的结果。(在SVM分类决策中起决定作用的是支持向量)

    可以灵活的指定不同的核函数(scikit官网

  缺点:大规模训练样本难以实施(存储训练样本和核矩阵(m阶)空间消耗大,时间复杂度高O(m2) )

    对参数调节和核函数的选择敏感,对缺失数据敏感

    原始分类器不加修改仅适用于处理二分类问题(改进:通过多个二类支持向量机的组合来解决等等);

    不支持概率估计(sklearn是通过5-折交叉实现的)

    高斯核容易过拟合

  适用数据类型:数值型和标称型数据。

4.注意事项

  核函数将数据从低维度映射到高维:SVM是通过寻找超平面将数据进行分类的,但是当数据不是线性可分的时候就需要利用核函数将数据从低维映射到高维使其线性可分后,

再应用SVM理论。

  标准化:基于距离的算法都要进行标准化

5.实现和具体例子(没有找到经典的应用,就直接套各种官网的例子吧)

  使用one-class SVM做异常检测(附知乎介绍什么是一类支持向量

  机器学习python实现SMO代码

  目前支持向量机主要应用在模式识别领域中的文本识别,中文分类,人脸识别等;同时也应用到许多的工程技术和信息过滤等方面.

6.适用场合

  是否支持大规模数据:线性支持;非线性不适合,暂时没找到分布式实现

  特征维度:可以很高

  是否有 Online 算法:线性有,非线性没有(参考自

  特征处理:支持数值型数据,类别型类型需要进行0-1编码

  

支持向量机(SVM)复习总结的更多相关文章

  1. 转:机器学习中的算法(2)-支持向量机(SVM)基础

    机器学习中的算法(2)-支持向量机(SVM)基础 转:http://www.cnblogs.com/LeftNotEasy/archive/2011/05/02/basic-of-svm.html 版 ...

  2. 【IUML】支持向量机SVM

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

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

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

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

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

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

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

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

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

  7. 支持向量机SVM——专治线性不可分

    SVM原理 线性可分与线性不可分 线性可分 线性不可分-------[无论用哪条直线都无法将女生情绪正确分类] SVM的核函数可以帮助我们: 假设‘开心’是轻飘飘的,“不开心”是沉重的 将三维视图还原 ...

  8. 一步步教你轻松学支持向量机SVM算法之案例篇2

    一步步教你轻松学支持向量机SVM算法之案例篇2 (白宁超 2018年10月22日10:09:07) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...

  9. 一步步教你轻松学支持向量机SVM算法之理论篇1

    一步步教你轻松学支持向量机SVM算法之理论篇1 (白宁超 2018年10月22日10:03:35) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...

  10. OpenCV 学习笔记 07 支持向量机SVM(flag)

    1 SVM 基本概念 本章节主要从文字层面来概括性理解 SVM. 支持向量机(support vector machine,简SVM)是二类分类模型. 在机器学习中,它在分类与回归分析中分析数据的监督 ...

随机推荐

  1. spring 定时任务配置

    1.(易)如何在spring中配置定时任务? spring的定时任务配置分为三个步骤: 1.定义任务 2.任务执行策略配置 3.启动任务 (程序中一般我们都是到过写的,直观些) 1.定义任务 < ...

  2. 【Hawk】入门教程(1)——从URL开始

    入门教程(1)--从URL开始 首先感谢辛苦的沙漠君 先把沙漠君的教程载过来:)可以先看一遍 Hawk-数据抓取工具:简明教程 Hawk 数据抓取工具 使用说明(二) 20分钟无编程抓取大众点评17万 ...

  3. 多线程之互斥锁(By C++)

    首先贴一段win32API实现的多线程的代码,使用CreateThread实现,如果不要传参数,就把第四个参数设为NULL #include<Windows.h> #include< ...

  4. org.openqa.selenium.remote.SessionNotFoundException: Unexpected error launch IE

    1.在启动ie浏览器前先加入属性设置一项: DesiredCapabilities ie = DesiredCapabilities.internetExplorer(); ie.setCapabil ...

  5. 给mac配置adb 路径

    给mac配置adb 路径 (1)找到对应的adb 所在路径 /Users/***/Library/Android/sdk/platform-tools (2)启动终端,输入 cd $Home (3)输 ...

  6. Building a RESTful Web Service

    Reference: https://spring.io/guides/gs/rest-service/ 参照上述链接进行操作,使用gradle build. 因为total new to this. ...

  7. ViewPager取消左右滑动切换功能

    ViewPager取消左右滑动切换功能 最近做项目要求某种情况下ViewPager不能滑动,那么我们只需要重写这个方法就可以禁止ViewPager滑动 IndexViewPager.java: imp ...

  8. SQL 查找重复项及批量修改数据成固定格式

    1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select   peopleId  from ...

  9. 【转】angular指令入坑

    独立作用域和函数参数 通过使用本地作用域属性,你可以传递一个外部的函数参数(如定义在控制器$scope中的函数)到指令.这些使用&就可以完成.下面是一个例子,定义一个叫做add的本地作用域属性 ...

  10. vue-cli 路由 实现类似tab切换效果(vue 2.0)

    1,更改main.js 2,在App.vue中,写入两个跳转链接(router-link),分别跳转到"home""About" (home.About即分别是 ...