【笔记】浅谈支持向量机(SVM)
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)的更多相关文章
- 以图像分割为例浅谈支持向量机(SVM)
1. 什么是支持向量机? 在机器学习中,分类问题是一种非常常见也非常重要的问题.常见的分类方法有决策树.聚类方法.贝叶斯分类等等.举一个常见的分类的例子.如下图1所示,在平面直角坐标系中,有一些点 ...
- C#基础笔记---浅谈XML读取以及简单的ORM实现
背景: 在开发ASP.NETMVC4 项目中,虽然web.config配置满足了大部分需求,不过对于某些特定业务,我们有时候需要添加新的配置文件来记录配置信息,那么XML文件配置无疑是我们选择的一个方 ...
- Java学习笔记——浅谈数据结构与Java集合框架(第一篇、List)
横看成岭侧成峰,远近高低各不同.不识庐山真面目,只缘身在此山中. --苏轼 这一块儿学的是云里雾里,咱们先从简单的入手.逐渐的拨开迷雾见太阳.本次先做List集合的三个实现类的学习笔记 List特点: ...
- java设计模式学习笔记--浅谈设计模式
设计模式的目的 编写软件的过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战.设计模式为了让程序具有更好的 1.代码重用性(即:相同功能的代码,不用多次编写) ...
- struts 2学习笔记—浅谈struts的线程安全
Sruts 2工作流程: Struts 1中所有的Action都只有一个实例,该Action实例会被反复使用.通过上面Struts 2 的工作流程的红色字体部分我们可以清楚看到Struts 2中每个A ...
- Android 开发笔记“浅谈DDMS视图”
DDMS 的全称是Dalvik Debug Monitor Service,即Dalvik调试监控服务,是一个可视化的调试监控工具.它主要是对系统运行后台日志的监控,还有系统线程,模拟器状态的监控.此 ...
- Java学习笔记——浅谈数据结构与Java集合框架(第二篇、Queue、Set)
江南好,何处异京华. 香散翠帘多在水,绿残红叶胜于花.无事避风沙. --<纳兰词> 诗词再好,大图不能忘 上大图: 先说说栈和队列: 栈就好比手枪的弹匣,你往里面压入子弹,最先压入的子弹就 ...
- Java学习笔记——浅谈数据结构与Java集合框架(第三篇、Map)
桃李春风一杯酒,江湖夜雨十年灯 --寄黄几复 之前图上写错了,是Hashtable类.t是小写的,它是个很古老的类,以至于命名都没有那么规范.. HashMap HashMap就是存储key-valu ...
- 【软件构造】-<笔记>-浅谈java中类的初始化过程
编写java程序时,每创建一个新的对象,都会对对象的内容进行初始化. 每一个类的方法中的局部变量都有严格的初始化要求,因此假如写出下面的程序: void f(){ int i; i++; } 编译时就 ...
随机推荐
- DRF之过滤排序分页异常处理
一.过滤 对于列表数据要通过字段来进行过滤,就需要添加 django-filter 模块 使用方法: # 1.注册,在app中注册 settings.py INSTALLED_APPS = [ 'dj ...
- 面试题三:MySQL
MySQL有哪些存储引擎? MyISAM.InnoDB.CSV.Memory等 MyISAM和InnoDB比较: InnoDB MyISAM 事务 支持 不支持 存储限制 64TB 无 锁粒度 行锁 ...
- SpringCloud:扩展zuul配置路由访问
继续上次整合SpringCloud的demo进行扩展zuul:https://www.cnblogs.com/nhdlb/p/12555968.html 这里我把zuul划分出一个模块单独启动 创建 ...
- SpringMVC(10)实现注解式权限验证
在项目中如何处理出现的异常,在每个可能出现异常的地方都写代码捕捉异常?这显然是不合理的,当项目越来越大是也是不可维护的.那么如何保证我们处理异常的代码精简且便于维护呢?这就是本篇要讲的内容->异 ...
- SoapUI Pro 最新版本和最新功能
专为整个后端的端到端测试而构建 创建全面的端到端测试,以从API定义或实时端点验证API的整个工作流程.只需单击几下即可传递响应数据并添加断言-无需编码. 综合生成或配置数据 通过简单的数据驱动测试来 ...
- Dapper的基本使用 [转]
Dapper是.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的.也就是说实体类都要自己写.它没有复杂的配置文件,一个单文件就可 ...
- 机器学习Sklearn系列:(四)朴素贝叶斯
3--朴素贝叶斯 原理 朴素贝叶斯本质上就是通过贝叶斯公式来对得到类别概率,但区别于通常的贝叶斯公式,朴素贝叶斯有一个默认条件,就是特征之间条件独立. 条件概率公式: \[P(B|A) = \frac ...
- python使用笔记23--面向对象编程
1.面向对象编程概念 面向对象是包含面向过程 面向过程编程 买车: 1.4s看车,买车 2.上保险 保险公司 3.交税 地税局 4.交管所 上牌 面向对象编程 卖车处: 1.4s 2.保险 3.交税 ...
- C语言:冒泡排序例子
//冒泡排序 //14个数字排序:14个数的组合:14*13/2=91次 理论上比较91次 ,实际只有39次进行了变量交换 #include <stdio.h> void bubble_s ...
- 达梦数据库(DM8)大规模并行集群MPP 2节点安装部署
达梦数据库大规模并行集群MPP 2节点安装部署 1.环境准备 os 数据库版本 ip mpp角色 centos7.x86 DM8 192.168.30.100 mpp1 centos7.x86 ...