机器学习6 线性向量机

前言

向量机可能是我们学习的路上遇到的第一个拦路虎,公式推导很复杂,前前后后花了不少时间,但思想却很简单。

什么是支持向量机

SVM的英文全称是Support Vector Machines,我们叫它支持向量机。支持向量机是一种比较全面的算法,既能做线性或非线性分类,回归,甚至是异常值检测任务。让我们以一个小故事的形式,开启SVM之旅。

在很久以前的情人节,一位大侠要去救他的爱人,但天空中的魔鬼和他玩了一个游戏。

魔鬼在桌子上似乎有规律放了两种颜色的球,说:"你用一根棍分开它们?要求:尽量在放更多球之后,仍然适用。"

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

于是大侠这样放,干的不错?

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

然后魔鬼,又在桌上放了更多的球,似乎有一个球站错了阵营。显然,大侠需要对棍做出调整。

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

SVM就是试图把棍放在最佳位置,好让在棍的两边有尽可能大的间隙。这个间隙就是球到棍的距离。

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

现在好了,即使魔鬼放了更多的球,棍仍然是一个好的分界线。

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

魔鬼看到大侠已经学会了一个trick(方法、招式),于是魔鬼给了大侠一个新的挑战。

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

现在,大侠没有棍可以很好帮他分开两种球了,现在怎么办呢?当然像所有武侠片中一样大侠桌子一拍,球飞到空中。然后,凭借大侠的轻功,大侠抓起一张纸,插到了两种球的中间。

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

现在,从空中的魔鬼的角度看这些球,这些球看起来像是被一条曲线分开了。

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

再之后,无聊的大人们,把这些球叫做data,把棍子叫做classifier, 找到最大间隙的trick叫做optimization,拍桌子叫做kernelling, 那张纸叫做hyperplane

更为直观地感受一下吧(需要翻墙):https://www.youtube.com/watch?v=3liCbRZPrZA

概述一下:

当一个分类问题,数据是线性可分的,也就是用一根棍就可以将两种小球分开的时候,我们只要将棍的位置放在让小球距离棍的距离最大化的位置即可,寻找这个最大间隔的过程,就叫做最优化。但是,现实往往是很残酷的,一般的数据是线性不可分的,也就是找不到一个棍将两种小球很好的分类。这个时候,我们就需要像大侠一样,将小球拍起,用一张纸代替小棍将小球进行分类。想要让数据飞起,我们需要的东西就是核函数(kernel),用于切分小球的纸,就是超平面。

也许这个时候,你还是似懂非懂,没关系。根据刚才的描述,可以看出,问题是从线性可分延伸到线性不可分的。那么,我们就按照这个思路,进行原理性的剖析。

线性支持向量机

先看下线性可分的二分类问题。

 

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

对于如图(a)的数据分布,给出了两种分类模型:(b)和(c)。两者都能将数据正确的分类,但我们直观上感觉(b)的分类性能更优。

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

在数据中又添加了一个红点。可以看到,分类器B依然能很好的分类结果,而分类器C则出现了分类错误。显然分类器B的"决策面"放置的位置优于分类器C的"决策面"放置的位置,SVM算法也是这么认为的,它的依据就是分类器B的分类间隔比分类器C的分类间隔大。这里涉及到第一个SVM独有的概念"分类间隔"。在保证决策面方向不变且不会出现错分样本的情况下移动决策面,会在原来的决策面两侧找到两个极限位置(越过该位置就会产生错分现象),如虚线所示。虚线的位置由决策面的方向和距离原决策面最近的几个样本的位置决定。而这两条平行虚线正中间的分界线就是在保持当前决策面方向不变的前提下的最优决策面。两条虚线之间的垂直距离就是这个最优决策面对应的分类间隔。显然每一个可能把数据集正确分开的方向都有一个最优决策面(有些方向无论如何移动决策面的位置也不可能将两类样本完全分开),而不同方向的最优决策面的分类间隔通常是不同的,那个具有“最大间隔”的决策面就是SVM要寻找的最优解。而这个真正的最优解对应的两侧虚线所穿过的样本点,就是SVM中的支持样本点,称为"支持向量"。

1、数学建模

求解这个"决策面"的过程,就是最优化。一个最优化问题通常有两个基本的因素:1)目标函数,也就是你希望什么东西的什么指标达到最好;2)优化对象,你期望通过改变哪些因素来使你的目标函数达到最优。在线性SVM算法中,目标函数显然就是那个"分类间隔",而优化对象则是决策面。所以要对SVM问题进行数学建模,首先要对上述两个对象("分类间隔"和"决策面")进行数学描述。按照一般的思维习惯,我们先描述决策面。

数学建模的时候,先在二维空间建模,然后再推广到多维。

(1)"决策面"方程

我们都知道二维空间下一条直线的方式如下所示:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

现在我们做个小小的改变,让原来的x轴变成x1,y轴变成x2

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

移项得:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

将公式向量化得:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

进一步向量化,用w列向量和x列向量和标量γ进一步向量化:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

其中,向量w和x分别为:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

这里w1=a,w2=-1。我们都知道,最初的那个直线方程a和b的几何意义,a表示直线的斜率,b表示截距,a决定了直线与x轴正方向的夹角,b决定了直线与y轴交点位置。那么向量化后的直线的w和r的几何意义是什么呢?

现在假设:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

可得:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

在坐标轴上画出直线和向量w:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

蓝色的线代表向量w,红色的线代表直线y。我们可以看到向量w和直线的关系为垂直关系。这说明了向量w也控制这直线的方向,只不过是与这个直线的方向是垂直的。标量γ的作用也没有变,依然决定了直线的截距。此时,我们称w为直线的法向量。

二维空间的直线方程已经推导完成,将其推广到n维空间,就变成了超平面方程。(一个超平面,在二维空间的例子就是一个直线)但是它的公式没变,依然是:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

不同之处在于:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

我们已经顺利推导出了"决策面"方程,它就是我们的超平面方程,之后,我们统称其为超平面方程。

(2)"分类间隔"方程

现在,我们依然对于一个二维平面的简单例子进行推导。

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

我们已经知道间隔的大小实际上就是支持向量对应的样本点到决策面的距离的二倍。那么图中的距离d我们怎么求?我们高中都学过,点到直线的距离距离公式如下:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

公式中的直线方程为Ax0+By0+C=0,点P的坐标为(x0,y0)。

现在,将直线方程扩展到多维,求得我们现在的超平面方程,对公式进行如下变形:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

这个d就是"分类间隔"。其中||w||表示w的二范数,求所有元素的平方和,然后再开方。比如对于二维平面:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

那么,

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

我们目的是为了找出一个分类效果好的超平面作为分类器。分类器的好坏的评定依据是分类间隔W=2d的大小,即分类间隔w越大,我们认为这个超平面的分类效果越好。此时,求解超平面的问题就变成了求解分类间隔W最大化的为题。W的最大化也就是d最大化的。

(3)约束条件

看起来,我们已经顺利获得了目标函数的数学形式。但是为了求解w的最大值。我们不得不面对如下问题:

  • 我们如何判断超平面是否将样本点正确分类?
  • 我们知道要求距离d的最大值,我们首先需要找到支持向量上的点,怎么在众多的点中选出支持向量上的点呢?

上述我们需要面对的问题就是约束条件,也就是说我们优化的变量d的取值范围受到了限制和约束。事实上约束条件一直是最优化问题里最让人头疼的东西。但既然我们已经知道了这些约束条件确实存在,就不得不用数学语言对他们进行描述。但SVM算法通过一些巧妙的小技巧,将这些约束条件融合到一个不等式里面。

这个二维平面上有两种点,我们分别对它们进行标记:

  • 红颜色的圆点标记为1,我们人为规定其为正样本;
  • 蓝颜色的五角星标记为-1,我们人为规定其为负样本。

对每个样本点xi加上一个类别标签yi:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

如果我们的超平面方程能够完全正确地对上图的样本点进行分类,就会满足下面的方程:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

如果我们要求再高一点,假设决策面正好处于间隔区域的中轴线上,并且相应的支持向量对应的样本点到决策面的距离为d,那么公式进一步写成:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

上述公式的解释就是,对于所有分类标签为1和-1样本点,它们到直线的距离都大于等于d(支持向量上的样本点到超平面的距离)。公式两边都除以d,就可以得到:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

其中,

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

因为||w||和d都是标量。所以上述公式的两个矢量,依然描述一条直线的法向量和截距。

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

上述两个公式,都是描述一条直线,数学模型代表的意义是一样的。现在,让我们对wd和γd重新起个名字,就叫它们w和γ。因此,我们就可以说:"对于存在分类间隔的两类样本点,我们一定可以找到一些超平面,使其对于所有的样本点均满足下面的条件:"

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

上述方程即给出了SVM最优化问题的约束条件。这时候,可能有人会问了,为什么标记为1和-1呢?因为这样标记方便我们将上述方程变成如下形式:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

正是因为标签为1和-1,才方便我们将约束条件变成一个约束方程,从而方便我们的计算。

(4)线性SVM优化问题基本描述

现在整合一下思路,我们已经得到我们的目标函数:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

我们的优化目标是是d最大化。我们已经说过,我们是用支持向量上的样本点求解d的最大化的问题的。那么支持向量上的样本点有什么特点呢?

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

你赞同这个观点吗?所有支持向量上的样本点,都满足如上公式。如果不赞同,请重看"分类间隔"方程推导过程。

现在我们就可以将我们的目标函数进一步化简:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

因为,我们只关心支持向量上的点。随后我们求解d的最大化问题变成了||w||的最小化问题。进而||w||的最小化问题等效于

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

为什么要做这样的等效呢?这是为了在进行最优化的过程中对目标函数求导时比较方便,但这绝对不影响最优化问题最后的求解。我们将最终的目标函数和约束条件放在一起进行描述:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

这里n是样本点的总个数,缩写s.t.表示"Subject to",是"服从某某条件"的意思。上述公式描述的是一个典型的不等式约束条件下的二次型函数优化问题,同时也是支持向量机的基本数学模型。

(5)求解

上述模型能直接用二次规划规划问题求解,但书中都会介绍一种更高效的对偶方法。

1)构造拉格朗日函数

我们先将有约束的问题,转化为无约束问题:

公式变形如下:

其中αi是拉格朗日乘子,αi大于等于0,是我们构造新目标函数时引入的系数变量。

看看之前的模型:

机器学习实战教程(八):支持向量机原理篇之手撕线性SVM

当样本点不满足约束条件时:

此时如果ai正无穷,L(w,b,a)变为正无穷

当样本点满足约束条件时:

有:

所以我们的目标函数可以换成:

接下来引入对偶问题。

2)对偶

先求最大值,再求最小值。这样的话,我们首先就要面对带有需要求解的参数w和b的方程,而αi又是不等式约束,这个求解过程不好做。所以,我们需要使用拉格朗日函数对偶性,将最小和最大的位置交换一下,这样就变成了:

显然有:

通常来说很难取到等号,等号成立需满足以下条件:
1)原始问题为凸优化问题

2)原始问题有解(线性可分)

3)有线性约束

在这里统统满足。

所以我们的目标函数为:

 可见min内部变成无约束问题,我们对w,b求偏导得:

将上面两个公式代入:

注意上述优化需满足如下条件:

这就是KKT条件。

从中能看出一个重要的性质:当a>0时,则必有

所对应的样本点位于最大间隔边界上,是一个支持向量。

当a=0时,根据公式:

该样本不影响w的取值

这显示出支持向量机的一个重要性质:训练完成后,大部分的训练样本都不重要,最终模型仅与支持向量有关。

那么如何求解:

这是一个二次优化问题,可使用通用的二次规划算法来求解,但该问题的规模正比于训练样本数,计算时间会很长,所以通常使用更高效的算法:SMO(序列最小优化)算法。推导很复杂,在此不再介绍,有兴趣的可以在我列出的参考资料中学习。

小结

本节介绍了支持向量机的思想,主要介绍了线性向量机的推导求解,那对于非线性数据如何进行分类呢?下节将要介绍核函数技巧,使用它来进行非线性数据分类。

参考资料

【1】机器学习实战教程(八)   https://cuijiahua.com/blog/2017/11/ml_8_svm_1.html

【2】机器学习技法  林轩田  https://www.bilibili.com/video/av12469267?from=search&seid=16189317168232782932

【3】机器学习 周志华

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值