感知机

  要理解svm,首先要先讲一下感知机(Perceptron),感知机是线性分类器,他的目标就是通过寻找超平面实现对样本的分类;对于二维世界,就是找到一条线,三维世界就是找到一个面,多维世界就是要找到一个线性表达式,或者说线性方程:

f(x) = ΣθiXi

  表达式为0,就是超平面,用来做分界线作为分类;A分类都满足f(x) > 0, B分类都满足f(x) < 0;未来进行分类预测的时候,就是将特征值带入到模型中,根据输出值的正负号即可实现分类。算法实现过程即使初始化一个权重矩阵,然后通过梯度下降来进行持续优化。

  但是感知机有一个问题:那就是解太多了,比如二维世界里面(元素只有两个特征),作为区分线可以划分无数条:

  所以现在使用感知机来进行数据分类的已经很少了,但是感知机确实很多优秀机器学习的基础,比如神经网络,以及今天我们要讲的SVM。

SVM的支持平面和超平面

  SVM基于感知机的理论有深入了一步,就是SVM追求,距离超平面最近的点的距离最大化,或者说追求分类超平面两面的支持平面的宽度尽量宽:

  为什么呢?我们先来讲一下为什么叫支持向量机,就是因为,SVM关注的是超平面两边的"支持"超平面,及所谓辅助超平面,那么在支持超平面上面的点呢,因为是方向和大小的,所以称之为支持向量,所以在构建出来的模型称之位"支持向量机(SVM,Support Vector Machine)"。

  那么为什么要最大化呢?其实最大化就是指最近的两类元素之间的距离最小化(max 1/||w|| 等价于min 0.5 *||w||²(这里的0.5其实可以不管,因为不影响对于w取值),所以两个分类元素之间最小距离,就是要找的两个支持平面的距离;支持两个平面(包含了支持向量)的最大化,其实意味着超平面是位于最中间的位置;这个最中间的位置,是值得玩味的,因为如果有偏倚的话,将会导致分类偏差,如下图所示,蓝线和橙色的线,明显有偏离,这样对导致分类偏差:

  所以,我们目标是能够将超平面建立在中间位置,那么怎么确定这个中间位置呢?这个时候就需要获取最近分类元素之间距离,这个距离就是最大距离,然后依赖这些元素,构建两条平行的支持(辅助)超平面,而是可以推出超平面(等距的夹在两个支持超平面之间)。

  这两个支持超平面分别f(x) = 1以及f(x) = -1,不要问我为什么是1或者-1,因为没有为什么,只是习惯;这个比较像逻辑回归,为什么区分要是(0,1),其实(-1,1)可以,只要模型能够把元素的类别分出来,其实模型区分度具体的值并不重要,我们指定了具体的值,只不过是希望模型能够唯一化,否则有无数个模型取值可以满足样本划分了;

  所以,只要是能够实现符号相反就可以,总之就是一条辅助超平面罩着的小弟满足函数值 > 0,另外一条支持超平面罩着的"小弟"的函数值<0即可。

  那么怎么来计算距离呢?什么是距离?曼哈顿,欧式等等,其实距离本身就是一个元素特征某种算法,比如可以哈希算法,可以是直接加减,还可以是某个既有特征权重,比如对于函数距离而言,就是y * (wx + b),简写成y * f(x),这里的y是样本分类真值(1,或者-1),为什么这么做?y值为1,并不会改变距离值本身,这里,函数距离有一个好处,就是符号性,如果f(x)预测正确,那么y和f(x)符号一致结果必然是正值,如果是负值,说明预测错误。不过函数距离有一个问题,就是当w和b同步缩放的时候,会导致距离变化,但是其实这种等比变化其实是一个平面;所以最终采用的集合距离:

y * (wx + b)/ ||w||

  注:这个公式来自于空间距离公式d = |Ax + By + Cz|/(A² + B² + C²)^0.5

  下面就是求解最大距离问题,首先是要进行变形,因为i我们目标是求解w,所以其实对于距离公式而言,所以我们可以假设分子为1或者分母为1,因为在求极值的场景下,它是不影响的,svm选择分子为1(感知机选择分母为1)。于是目标就是:

max 1 / ||w||

  对于这个max过程的求解使用了动态规划里面的凸优化算法,这里强调一下动态规划,就是都在变,支持向量在变,支持超平面在变(w,b不定),超平面也在变,这个是动态规划范畴,凸优化是因为解决这个问题满足了凸优化的拉格朗日算法求解。

  结果就是可以计算出来w和b。通过w和b,我们可以知道那些是模型的支持向量,支持超平面以及超平面都可以知道了。

软间隔 - SVM对于异常点的处理

  为了避免少量的异常点导致的街道距离变宽,所以采用了软间隔(相对于上面介绍的硬间隔),就是允许部分异常点在街道里面,同时还能够正确分类这些街道内的值;至于允许多少,SVM中通过一个参数C来进行控制,称之为惩罚系数,这个C越大,意味着惩罚越大,可以理解为比较严格,对于异常点的容忍度也就低;所以街道宽度倾向于窄一些;C小,则意味着SVM设置的相对宽松,允许街道深处存在异常点。

  我们可以想象一下,指定了软间隔的svm的街道一定比只是硬间隔的svm的街道要款,只要是软间隔,就一定能够宽容;但是要知道,控制软间隔街道宽度还有一个元素,就是j,优化对象是:

min 1/||w|| + C*∑εi

  所以距离是C和j共同的;但是作为超参数,只是提供了C这个接口,我们可以不关ε心,它其实代表的是松弛因子,是每一个元素(样本计算距离的时候都需要考虑的)。

SVM的损失函数

  SVM的损失函数称之为合页损失函数(hinge loss function),分类正确且距离大于等于1,那么损失值为0,反之则值是1 - y*(w * x + b);这个计算就是节点到平面1的距离,svm损失函数的目标就是所有的算错的点的到达1的距离最小(这个和感知机的是一样的)

  类似的,感知机的损失函数是y *(w*x + b),注意,感知机并没有支持平面,所以也就没有被1减;逻辑回归的损失函数是log[1 - exp(-y * (w*x + b))],上述积累模型的损失函数都是和超平面有关系,可能是因为都是分类模型,最求的都是针对超平面距离最小化的处理吧。

代码处理

  在使用scikit learn里面的linearSvc的时候,注意以下三个函数:

  C:惩罚系数

  loss:损失函数,需要指定为"hinge",默认的不是这个。

  dual:特征数量>样本数量,true;反之,false

  但是,这个只是线性SVM,因为做分类是线性表达式(平面),那么那些非平面的分类怎么办呢?SVM可是号称全能分类小能手啊。请见下一篇,SVM核函数

参考:

https://www.cnblogs.com/pinard/p/6097604.html

SVM – 线性分类器的更多相关文章

  1. 2. SVM线性分类器

    在一个线性分类器中,可以看到SVM形成的思路,并接触很多SVM的核心概念.用一个二维空间里仅有两类样本的分类问题来举个小例子.如图所示 和是要区分的两个类别,在二维平面中它们的样本如上图所示.中间的直 ...

  2. 文本分类学习 (八)SVM 入门之线性分类器

    SVM 和线性分类器是分不开的.因为SVM的核心:高维空间中,在线性可分(如果线性不可分那么就使用核函数转换为更高维从而变的线性可分)的数据集中寻找一个最优的超平面将数据集分隔开来. 所以要理解SVM ...

  3. SVM入门——线性分类器的求解,核函数

    一.问题的描述 从最一般的定义上说,一个求最小值的问题就是一个优化问题(也叫寻优问题,更文绉绉的叫法是规划——Programming),它同样由两部分组成,目标函数和约束条件,可以用下面的式子表示: ...

  4. cs231n线性分类器作业 svm代码 softmax

    CS231n之线性分类器 斯坦福CS231n项目实战(二):线性支持向量机SVM CS231n 2016 通关 第三章-SVM与Softmax cs231n:assignment1——Q3: Impl ...

  5. SVM中的线性分类器

    线性分类器: 首先给出一个非常非常简单的分类问题(线性可分),我们要用一条直线,将下图中黑色的点和白色的点分开,很显然,图上的这条直线就是我们要求的直线之一(可以有无数条这样的直线)     假如说, ...

  6. cs231n笔记:线性分类器

    cs231n线性分类器学习笔记,非完全翻译,根据自己的学习情况总结出的内容: 线性分类 本节介绍线性分类器,该方法可以自然延伸到神经网络和卷积神经网络中,这类方法主要有两部分组成,一个是评分函数(sc ...

  7. cs331n 线性分类器损失函数与最优化

    tip:老师语速超快...痛苦= = 线性分类器损失函数与最优化 \(Multiclass SVM loss: L_{i} = \sum_{j \neq y_{i}} max(0,s_{i}-s_{y ...

  8. cs231n笔记 (一) 线性分类器

    Liner classifier 线性分类器用作图像分类主要有两部分组成:一个是假设函数, 它是原始图像数据到类别的映射.另一个是损失函数,该方法可转化为一个最优化问题,在最优化过程中,将通过更新假设 ...

  9. [基础]斯坦福cs231n课程视频笔记(一) 图片分类之使用线性分类器

    线性分类器的基本模型: f = Wx Loss Function and Optimization 1. LossFunction 衡量在当前的模型(参数矩阵W)的效果好坏 Multiclass SV ...

随机推荐

  1. IDisposable 接口

    提供一种用于释放非托管资源的机制. 地址:https://docs.microsoft.com/zh-cn/dotnet/api/system.idisposable?view=netframewor ...

  2. Linux学习24-腾讯云服务器开启swap分区

    前言 最近有小伙伴买的腾讯云的1核1G入门级服务器,发现部署的服务多了后,会自动停掉一些docker的的容器. 新买的腾讯云主机没有提供Swap分区,理由是由于主机经常因为内存使用率过高,频繁使用Sw ...

  3. 彻底理解 Cookie、Session、Token

    发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应, 尤其是我不用记 ...

  4. python基础笔记-列表

    列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现. 列表的数据项不需要具有相同的类型 创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可. def main(): ...

  5. JSR303/JSR-349,hibernate validation,spring validation 之间的关系

    JSR303是一项标准,JSR-349是其的升级版本,添加了一些新特性,他们规定一些校验规范即校验注解,如@Null,@NotNull,@Pattern,他们位于javax.validation.co ...

  6. nuxt 中使用 koa-session

    官方 github 网址:https://github.com/koajs/session 自己做的demo:https://github.com/cag2050/nuxt_session_demo ...

  7. 【Hadoop】新建hadoop用户以及用户组,给予sudo权限(转)

    1.首先新建用户,adduser命令 sudo adduser hadoop passwd hadoop 输入密码之后,一路 y 确定. 2.添加用户组 在创建hadoop用户的同时也创建了hadoo ...

  8. async 珠峰培训node正式课笔记 【async】任务流程控制,异步流程控制

    var async = require('async'); // series 串形任务 console.time('cost') async.series({ two:function(callba ...

  9. Dart 库预览

    容导航 dart:core - numbers, collections, strings, and more dart:async - asynchronous programming dart:m ...

  10. The difference between Virtual DOM and DOM

    dom是结构化的文本信息的抽象,是结构化的文本信息在内存中的表示 是操作结构化文本信息的api. Follow: Follow React attacks us with the virtual DO ...