【笔记】浅谈支持向量机(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++; } 编译时就 ...
随机推荐
- 增强采样软件PLUMED的安装与使用
技术背景 增强采样(Enhanced Sampling)是一种在分子动力学模拟中常用的技术,其作用是帮助我们更加快速的在时间轴上找到尽可能多的体系结构及其对应的能量.比如一个氢气的燃烧反应,在中间过程 ...
- Docker:docker国内镜像加速
创建或修改 /etc/docker/daemon.json 文件,修改为如下形式 { "registry-mirrors": [ "https://registry.do ...
- php mkdir 创建多级目录以及修改权限
mkdir() 用法:mkdir($path,0777,true); 第一个参数:必须,代表要创建的多级目录的路径:第二个参数:设定目录的权限,默认是 0777,意味着最大可能的访问权:注意:mode ...
- mysql中的条件语句case when/if函数
主要知识点为case函数,if函数,ifnull函数,elt函数几部分,主要用于mysql语句中的逻辑判断 待操作的表如下: p.p1 { margin: 0; font: 16px Menlo; c ...
- BUU mrctf shit
吐槽:去年没写出的题,现在终于可以上手了,昂哥nb 动调发现直接卡着不动了,怀疑是反调试,果然有好几处反调试 这里选择就不先nop了,先让程序跑起来,然后attach,在输入函数下面下个断点,atta ...
- 全网唯一开源java开发的支持高扩展,高性能的Mqtt集群broker!
SMQTT是一款开源的MQTT消息代理Broker, SMQTT基于Netty开发,底层采用Reactor3反应堆模型,支持单机部署,支持容器化部署,具备低延迟,高吞吐量,支持百万TCP连接,同时支持 ...
- ARTS第一周
开始进行的第一周. 1.Algorithm:每周至少做一个 leetcode 的算法题2.Review:阅读并点评至少一篇英文技术文章3.Tip:学习至少一个技术技巧4.Share:分享一篇有观点和思 ...
- 手写笔记变PDF-几行代码变命令行程序为图形化界面
前言 最近发现了一个非常不错的Python类库----Gooey, https://github.com/chriskiehl/Gooey 在它的帮助下我们可以非常方便的将一个命令行程序升级成一个图形 ...
- Swift-为什么String转换Int的结果是nil
摘要 知其然,更要知其所以然.前段时间用 String 转换 Int 处理时,发现一种情况返回 nil,就换成 String 转换 Double 的方式处理.今天就要来看看这种返回 nil 的情况是怎 ...
- python之数据驱动Excel+ddt操作(方法二)
一.Mail163数据如下: 二.Excel+ddt代码如下: import xlrdimport unittestfrom selenium import webdriverfrom seleniu ...