svm多分类_(填坑)浅谈SVM

前言:

关于SVM的一些学习心得,在去年就有写的冲动了,每次都是写了一点就坚持不下去了。导致这篇文章在草稿箱里待了好几个月,这次刚好老师让我们交一个关于SVM的小作业。于是在交作业deadline的压力下。花了小半天写完了这篇文章,是填坑,也是对于SVM的一些回顾。而且温故真的能知新,如果不能那就多温几遍~(本文参考李航老师是《统计学习方法》)

NOTE:不知道为什么用mathtype编辑的公式,导入不了。为了保持格式完整,涉及公式的部分我就用截图表示了

__________________________________正文开始_______________________________________________

了解SVM:

SVM(support vector machine) 翻译过来就是支持向量机。这是一种二分类模型,基本模型定义是在特征空间上的间隔最大的线性分类器。它与感知机的主要区别在于间隔最大。(感知机的超平面要求特征空间所有的点距离分离超平面的距离尽可能的小,但是感知机的置信度很低;SVM要求特征空间中距离分离超平面的最小距离最大化,这样的方式可以保障有足够大的置信度)。SVM的核心问题是使得间隔最大化,转化为数学问题就是凸二次规划问题的求解

因为感知机模型是SVM的重要基础,所以要简单介绍一下感知机模型

感知机模型的最简单的描述如图1所示:

0bd8e4c69ef7ef7b9cf00d816f2f65d4.png
图1--感知机模型

感知机听起来很高大上,其实上图就已经把感知机的基本要素概括了。

任务描述:在图1中,我们想用一条直线把蓝色的点和红色的点区分开来,那么该怎么做?

任务分析:我们从图中可得,蓝色的点和红色的点完全线性可分的。既然是线性可分的,那么就必然能找到函数S:

。S称为分离超平面。 使得上述的红蓝点被完全线性分开。那么现在有一个问题,从图1 中可以得知,可能存在无数个函数满足分开红蓝两类点。但是机器是不会这么想的,机器每次只能找到一个最符合的。机器寻找感知机的分离超平面是依照数据点到超平面的距离最小化来寻找的,而且每次运行的结果不尽相同(这和权值初始化有关)。具体的关于感知机的学习策略、损失函数可以参考李航老师的《统计学习方法》

SVM分类:

按照数据是否可以线性可分,SVM可分为线性可分支持向量机,线性支持向量机,非线性支持向量机。

当训练数据完全可分时, 通过硬间隔最大化(hard margin maximization)学习到一个线性可分支持向量机;当训练数据近似线性可分时,通过软间隔最大化(soft margin maximization)学习到一个线性支持向量机; 当训练数据线性不可分时,通过核技巧(kernel trick)以及软间隔最大化,得到一个非线性支持向量机。

SVM的数学原理

Note: SVM的损失函数是凸函数

一开始提到了SVM的和核心问题转化为凸二次规划问题,那么一般我们是怎么求凸二次规划问题的呢?

在高等数学中,我们对于求带约束的问题的通用方法是用拉格朗日乘子法。拉格朗日乘子法的求解流程大概包括以下几个步骤:

1. 构造拉格朗日函数

2. 解变量的偏导方程

3. 求得的参数代入目标函数

对于等式的约束问题描述如下:

cb530e0dfb50f5cd6f6d0c16e9088dc6.png

其中的关键在于构造拉格朗日函数,后面求解实际上就是高数里面基本的求偏导数的问题了。那么我们怎么构造拉格朗日函数呢?其实很简单,直接写成原函数+拉格朗日乘子*约束函数。即:

d37b582d008c579a2ec67ba6dc64e515.png

3fab55b7c6c1055b4658a43c87b5063c.png

那么同理对于约束条件是不等式的情况,问题描述如下:

f9d552ec96f1079db54a73f1b9a602bc.png

既然我们已经谈到极小极大问题了,那么就可以很自然的谈一下它的对偶问题:极大极小问题。

首先,给出结论,在满足一定的条件下(就是传说中的KKT条件)下,神奇的事情发生了。凸二次规划的极大极小形式和极小极大问题等价

先来介绍一下极大极小问题

e1cc3ff17ddcdba5ab6dedf20fe1808c.png

6954749818b2ee3725a1b7e1806d7c34.png

fb7392bb9684fadd578b9b25b96d9572.png

所综上所述,这就是SVM所要用到的核心数学原理。

下面正式来聊五毛钱的SVM

线性可分支持向量机:给定线性可分训练集,通过间隔最大化求得分超平面为S:

对应的分类决策函数为:

称为线性可分支持向量机。乍一看,这和感知机没什么区别啊,其实区别很细微,就是上面的间隔最大化!!!

e66d57107370cf45726ae23708dc1ab1.png
图2

在图2上有三个点A,B,C。均在超平面S的一侧,那么对于分类感知机来说,这三个点都在超平面的一侧,除了距离以外不能给分类器任何额外的信息。但是对于SVM来说,因为A离超平面S最远,那么从分类置信度上来说,SVM认为A分类正确的置信度就高,C离超平面最近,那么就C点的分类对于SVM来说就是不那么确信。B的距离介于A,C之间,所以置信度也就介于A,C之间。由上可知,一个点距离超平面的远近可以表示预测分类的确信程度(相当于额外提供了置信度的信息)。在超平面S:w*x + b=0 已知的情况下,

可以
相对表示点距离超平面的远近。(注意这是相对距离,没有一个绝对的参考系),又称为 函数距离(functional margin)。另外一个我们比较熟悉的距离是 几何距离(geometric margin)也就是点到平面的距离:计算公式为:

原理上,函数距离和几何距离都是可以表示点到超平面的距离,但是一般选择几何距离。解释如下,如果选择函数距离作为确信度的评估,因为函数距离为

那么当w和b同时扩大N倍,从函数距离来看,那么函数距离也扩大了N倍,但是其实超平面还是在原来那么地方。那么我们是否因为函数距离大了N倍,从而就认定点到超平面的距离就变大了呢?显然不行!我们需要加入一个规范项,这个规范项使得点到超平面的间隔不会因为系数的扩大而扩大。因为几何间距刚好就有这个规范项。所以几何距离为我们评估点到超平面的距离的标准。啰嗦了这么多就是为了确定一个间隔的标准.

那么继续来确定几何距离,下面是每个样本的几何距离。

447f1879880ea13fecfef69998a2ceca.png

92b4895e862e54aee26bfa60786ac08d.png
注意:目标是使得距离超平面最近的样本(一个或多个)的距离最大。不是所有样本离超平面的距离之和最大!!!

那么SVM的目的就是求这个最小距离的最大值(和前面将的极小极大问题接上了)。

151ff8403053179e1e43dc844bfc504d.png
这个γ就是表示最短几何距离

约束表示的是我们想让任何一个点到超平面的距离都比最小间隔要大。这个问题又可根据前面提到的几何距离和函数距离的关系转换成:

7261db32b888b9fbdaaccc0cdca3a7d1.png
这个γ*表示函数距离,注意理解函数距离和几何距离的区别

c103793821437c9e250c751a5032c804.png

从这里可以看到因w, b等比例发生变化时。函数距离发生了变化,但几何距离依旧不变。所以同理当最小的函数距离取值发生变化时,归于最小的几何距离的是不会有什么影响的。所以为了方便就取

,把
换为
(因为求前一项的最大值等价于求后一项的最小值)。所以,我们的主角终于露出了真实的面目:

f5d459e082e2d8053c01b975f7f7738a.png

我们的目标就是求解这个带约束凸函数最值。

目标明确了,解方程之前要解释一下支持向量机(support vector machine)。为什么叫做这个名字?它支持谁?还是谁支持它?支持向量是什么?

线性可分情况下,训练数据集样本中与分离超平面距离最近的样本点我们称为支持向量support vector)。那是不是分类器的分类超平面的确定是由支持向量决定呢?

答案是肯定的。支持向量就是使得约束:

取得等号的样本

即:

我们画出这个图的就会一目了然。

5c85fc953c1d618921481fb5f0acb422.png
记住这个图,后面有用

当分类y=1时,支持向量在超平面H1,非支持向量在H1的上方区域;当分类为y=-1时,支持向量在超平面H2。非支持向量在H2的下方区域。(把样本看成一个个向量,落在间隔边界的上的样本称为支持向量,没有落在间隔边界上的样本称为非支持向量)对于线性可分的情况,不会有点落在H1和H2超平面之间的区域的(H1,H2称为间隔边界)。所以在决定分离超平面的时候,只有支持向量起作用,其他的点并不起什么作用。所以相比感知机来说,SVM只要数据的扰动不影响支持向量的变化,那么一般的扰动是不影响最后的超平面的,因此是个很稳定的分类器。而感知机会因为任何一个点的微小变化(甚至是初始值的不同)而得到截然不同的超平面。

讲了这么多,终于到如何解这个凸二次规划问题了。

164eda7bb80b866ee435de0171308a76.png

这是一个标准的可以用拉格朗日乘子法求解的问题。对于这类问题,较好的实践是:

先判断是否满足KKT条件,若满足则先求对偶问题。因为对偶问题一般比较好入手,而且后面我们将看到通过对偶问题可以很自然的引入核函数(kernel function)的概念。核函数引入可以解决很多非线性可分的问题,是一个很实用的方法。

Step1:首先我们来判断这个问题能不能用对偶方法来求解。即需要判断是不是满足:f(x), c(x)均为凸函数,且c(x)严格执行约束。显然原始问题的目标函数和约束都满足这个条件,所以存在

使得
为原始问题的解
为对偶问题的解。即原始问题的解和对偶问题的解是等价的。所以我们可以放心的来求其对偶问题了。

Step2:对偶问题求解:

5abd44dc618a780f5a59c0fa887cac44.png

fe66f94eb58c7635ca673705baa7ae27.png

b237026e7103e377b6bb2f50ce65448e.png

3d6d2430fc8286c8c9ec54b7a94b034c.png

3f8ca598d737a672445915b89eda78bf.png

aa61b0e1efb0408d635c0b6d61aea6f2.png

a166268f1694361e7c94001ef5ef2296.png

255b0b620eb4c3ac7f058a823f61b1d0.png

以上就是我们对于线性可分数据集SVM的分类超平面的求解。这是SVM的基础,下面我们来看看如果数据集不是线性可分的情况该如何求解。

线性向量机:

现在我们由一些数据,里面有很少一部分特异点(非常少),这些特异点使得数据集不线性可分,如果去点这些特异点那么数据集就又变得线性可分了。这个时候我们就可以想的包容一些,在前面的线性可分的时候,我们的样本点满足函数距离大于等于1的要求。现在我们的数据集有些特异点,那么我们可以宽容一点,把这个距离的控制变得更松一些。即给每个样本点加上一个松弛量

使得函数间隔加上这个松弛变量大于等于1,那么约束条件为:

7563e84a5332db86df47928571bda3d7.png

f56c9d51a3c882b256f43cb8c8881e8a.png

40880eacab371c663ad54f41a0fb27e3.png

ebee6c39064c825b218f16ee953835f7.png

20fc8b02b4bb5968f6122ed8c7ecff4f.png

核方法:

前面讲了求原始问题可以将问题转化为其对偶问题的求解。对偶问题的求解主要是1)方便求解,2)很自然的映入核函数(kernel function)。

在前面的优化问题求解中我们经常碰到红色框框里面的结构:

26bc0ba015586133bb8b815bbce8c276.png

引入核函数的目的是为了解决数据分类的最后一种情况:非线性分类,即数据十分混乱,存在大量的特异点,以至于没办法同去除特异点来使数据变得有序。那么,这个时候就是核函数一展身手的时候了。

首先:非线性分类问题其实在二维空间没什么办法,但是如果我们通过一个非线性变化,将原本的非线性问题,变为线性问题。那么我们就可以通过前面讲的线性/近似线性的方法来求解分离超平面了。所以非线性变化的关键的找到那个非线性映射!

3dcd1c7cd00ee981fb3ea3c826842526.png

022c04e8acdcf4494955a4baa3909e9d.png

c18b89cc1632c3509bfe0a00cd4a4d1c.png

c438f09e9d66481bb30ac2c9c70eaf72.png

这里面需要区别一下核函数(kernel function)和核技巧(kernel tricks)的关系:kernel function 是一个二元函数K(x1,x2)=<f(x1) .f(x2)>注:.表示内积(inner product)核函数做了一件大好事。怎么说呢?本来求K(x1,x2)是要先找到映射关系f(.),然后计算f(x1)【f(x2)同理】。最后计算f(x1),f(x2)的内积……其中要命的是映射f 不止一种,而且还不好找。但是我现在有了核函数,是直接关于x1,x2的二元函数(x1,x2可以是标量也可以是向量),所以我就可以自己将高维空间的内积计算降低到低维空间计算,偷偷的省略掉了映射f的表示。所以人们把以上的这种方法称为使用了核技巧来计算高维空间内积!

一般现在常用的核函数为:多项式核,高斯核等。

41d356a83962c0e3eaae17b36cb78070.png

—————————————————正文结束————————————————

至此,线性,近似线性,非线性三种SVM都已经描述完了。不知道你们晕没晕,反正SVM在一开始让我晕了好几次,但是在反复看了几遍以后,发现它就没那么可怕了,而且每次看每次都有新的收获!由于时间仓促所以里面的一些知识点难免会有些错误,如果遇到你费解的地方,欢迎留言和大家一起讨论!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值