SVM支持向量机

支持向量机的思想原理

使用支持向量机的思想,既可以解决回归问题,又可以解决分类问题

那么支持向量机的思想是什么?

已经知道逻辑回归这种算法的本质就是在一个平面中寻找决策边界,而分类算法则是认为在这个边界的一侧属于一类,另一侧属于另一类,但是是要边界唯一

对于边界不唯一的问题,可称为不适定问题,逻辑回归解决此类问题的方法就设定一个概率函数,根据概率函数建模,然后最小化损失函数,从而得出决策边界,损失函数完全是由训练数据集决定的

PS:有的时候得出来的决策边界的划分可能泛化能力并不好,如果想要得到一个泛化能力好的决策边界,其特点就是离这条直线最近的点,让这个线尽可能的离这些点远,即在分类出来类别的同时,又与样本点尽可能的远

支持向量机的解决方式有所不同,在找到一个泛化能力好的决策边界以后,按照最近的点进行划线,在这两条线之间,不会存在任何的数据点,即寻找一个最优的决策边界,其距离两个类别的最近的样本最远,其中最近的点称为支持向量,最佳的决策向量就是由这两条向量决定的线的中间区域决定的,即中间的线

支持向量机要做的事情就是最大化两条线之间的距离(margin),从这个解决方法和这个思路来看,解决的是线性可分问题,线性可分问题即对于样本点来说,存在一根直线(高维来说就是存在一个超平面),可以将这些点划分出来,这样才有这个margin,这就是Hard margin SVM

很明显通常情况下,很多数据是线性不可分的,可以对其进行改进,得到soft margin SVM,就可以进行求解了

那么如何最大化margin呢,首先需要将margin给表达出来,得出数学公式以及函数,然后找到其中的一组取值,然后最大化margin

SVM的最优化问题

很明显,如果说线和线之间的距离是margin的话,设线与最佳的决策边界距离为d,这样就得到margin为两倍的d,这样只要得到了d的表达式就可以得到其最大值,就可以得到margin的最大值

解析几何中点到直线的距离求解公式可以很清楚的表示出来,设(x,y)为点,直线为AX+BY+C=0,其距离就可以表示为

将其扩展到n维的空间中,(可以参考这里)其中将截距表示为b

根据上述的式子可以得到距离为(其中w的模为每一维度的平方的和的开方)

这样对于SVM来说,假设这个决策边界为n维空间的直线表达式,又最近的样本点的距离为d,这就说明样本点到直线的距离要大于等于d才行,那么就可以得到(设置一类叫1,一类叫-1)

这就可以变形为

由于分子是一个数,那么就可以将分子消除以后得到

这样就可以得到表达这三条直线的公式

可以将式子化成一个式子

那么对于任何支持向量x,最大化d就是最大化距离,即

也就是对w的模的最小值进行求解,为了方便操作求导,可以设置为

这样就变成了在原先式子的条件下,来最小化上式,这就变成了一个有条件的最优化问题,这就是Hard margin SVM的思路以及方法,但是很多时候是不好用的,此时可能就需要修改,使用soft margin SVM

soft margin SVM

对于hard margin SVM来说,当两个类别的样本距离很近的时候,这样求出来的决策边界虽然是正确的分类,但是其泛化能力是很值得怀疑的

基于模型的目的就是泛化能力高,那么就可以思考一个机制,对于SVM来说,决策边界要有一定的容错能力,在一些情况下需要对一些数据进行错误分类来换取泛化能力的提升,对于线性不可分的问题就可以使用这种想法机制来求解,这就是soft margin SVM

对于soft margin SVM来说,需要允许SVM犯一些错误,可以将之前的条件修改成,其中减去的项要大于等于0

也就是说,在三条线之间再添加上虚线,可以允许有一些点在支持向量的直线和虚线之间,这条虚线公式可以写为

那么怎么才能有一定的容错空间但是容错空间又不能太大呢,其实只要将最小化的方程修改一下即可(加上所有的eta加起来的和,为了平衡两部分的比例,添加上一个系数用来衡量,C越大,SVM的容错空间越小)

上面的操作可以说是在soft margin SVM中加入了L1正则这种方式,可以理解为增加的值本身是一个正则化项,其是为了避免训练出来的模型向极端方向发展

增加正则化项的本质就是让模型针对训练数据集有更高的容错能力,拥有了容错能力以后,可以使模型对训练数据集中的极端数据不敏感,使用这种方式使泛化能力得到提升

有L1正则项,自然有L2正则项,增加L2正则的表达式区别就在于增加的eta的和的形式

以上就是SVM的原理和两种思路方式以及求解方法

【笔记】浅谈支持向量机(SVM)的更多相关文章

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

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

  2. C#基础笔记---浅谈XML读取以及简单的ORM实现

    背景: 在开发ASP.NETMVC4 项目中,虽然web.config配置满足了大部分需求,不过对于某些特定业务,我们有时候需要添加新的配置文件来记录配置信息,那么XML文件配置无疑是我们选择的一个方 ...

  3. Java学习笔记——浅谈数据结构与Java集合框架(第一篇、List)

    横看成岭侧成峰,远近高低各不同.不识庐山真面目,只缘身在此山中. --苏轼 这一块儿学的是云里雾里,咱们先从简单的入手.逐渐的拨开迷雾见太阳.本次先做List集合的三个实现类的学习笔记 List特点: ...

  4. java设计模式学习笔记--浅谈设计模式

    设计模式的目的 编写软件的过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战.设计模式为了让程序具有更好的 1.代码重用性(即:相同功能的代码,不用多次编写) ...

  5. struts 2学习笔记—浅谈struts的线程安全

    Sruts 2工作流程: Struts 1中所有的Action都只有一个实例,该Action实例会被反复使用.通过上面Struts 2 的工作流程的红色字体部分我们可以清楚看到Struts 2中每个A ...

  6. Android 开发笔记“浅谈DDMS视图”

    DDMS 的全称是Dalvik Debug Monitor Service,即Dalvik调试监控服务,是一个可视化的调试监控工具.它主要是对系统运行后台日志的监控,还有系统线程,模拟器状态的监控.此 ...

  7. Java学习笔记——浅谈数据结构与Java集合框架(第二篇、Queue、Set)

    江南好,何处异京华. 香散翠帘多在水,绿残红叶胜于花.无事避风沙. --<纳兰词> 诗词再好,大图不能忘 上大图: 先说说栈和队列: 栈就好比手枪的弹匣,你往里面压入子弹,最先压入的子弹就 ...

  8. Java学习笔记——浅谈数据结构与Java集合框架(第三篇、Map)

    桃李春风一杯酒,江湖夜雨十年灯 --寄黄几复 之前图上写错了,是Hashtable类.t是小写的,它是个很古老的类,以至于命名都没有那么规范.. HashMap HashMap就是存储key-valu ...

  9. 【软件构造】-<笔记>-浅谈java中类的初始化过程

    编写java程序时,每创建一个新的对象,都会对对象的内容进行初始化. 每一个类的方法中的局部变量都有严格的初始化要求,因此假如写出下面的程序: void f(){ int i; i++; } 编译时就 ...

随机推荐

  1. ExtJs4学习(五)最基本的Ext类

    Ext类是ExtJs中最常见.最基础的一个类,它是一个全局对象,封装了所有类.单例和 Sencha 库所提供的实用方法. 大多数用户界面组件在一个较低的层次嵌套在命名空间中, 但是提供的许多常见的实用 ...

  2. IntelliJ idea 中新建Spring项目 并部署到tomcat

    步骤还不熟悉  看的别人的文章做下去的 :https://www.cnblogs.com/yangyquin/p/5285272.html 一:新建Spring项目: 1. 2. 3. 4.然后在We ...

  3. 用swoole实现异步任务队列

    应用场景如下: 假如要发100封邮件,for循环100遍,这种方法显然是不可取的. 在一些比较繁杂的业务里,我们很可能有超过1万的邮件要群发.那我们怎么处理这个延迟的问题? 答案就是用异步.把&quo ...

  4. python使用笔记004-冒泡排序

    冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小.首字母从Z到A)错误就把他们交换过来.走访元素 ...

  5. python 抓取异常

    aa={"a":2,"b":1} for i in range(10): aa["a"]=aa["a"]-i print ...

  6. python 读取 查询 更新 删除 sql2008 类及应用

    import pymssql class MSSQL: def __init__(self,host,user,pwd,db): self.host = host self.user = user s ...

  7. Android系统编程入门系列之界面Activity响应丝滑的传统动画

    上篇文章介绍了应用程序内对用户操作响应的相关方法位置,简单的响应逻辑可以是从一个界面Activity跳转到另一个界面Activity,也可以是某些视图View的相对变化.然而不管是启动一个界面执行新界 ...

  8. 微信小程序云开发-数据库和云函数的应用-点赞/收藏/评论功能

    一.准备工作 1.创建数据库表articles,字段分别为: 序号 字段名称 字段类型 字段值 字段描述 备注说明 1 title string "标题1" 文章标题   2 de ...

  9. windows系统下 PHP怎么安装redis扩展

    在windows系统下安装redis就不赘述了,基本上就是下一步,下一步. 然后通过通过命令行启动服务. 我是在xamp 3.2.2的集成环境下进行本地redis扩展安装配置的,php的版本是5.6. ...

  10. 聪明的YZH

    [题目描述](杨子恒大佬) 聪明的YZH又开始搭积木了-- 他用1*1*1的立方体在n*m的平面搭积木,举几个他的杰作: 现在他又搭完了一个完美的杰作,他很好奇这对积木的表面积是多大 . [输入格式] ...