统计学习方法|支持向量机(SVM)原理剖析及实现

欢迎直接到我的博客查看最近文章:www.pkudodo.com。更新会比较快,评论回复我也能比较快看见,排版也会更好一点。

原始blog链接: http://www.pkudodo.com/2018/12/16/1-8/

 

前言

《统计学习方法》一书在前几天正式看完,由于这本书在一定程度上对于初学者是有一些难度的,趁着热乎劲把自己走过的弯路都写出来,后人也能走得更顺畅一点。

以下是我的github地址,其中有《统计学习方法》书中所有涉及到的算法的实现,也是在写博客的同时编写的。在编写宗旨上是希望所有人看完书以后,按照程序的思路再配合书中的公式,能知道怎么讲所学的都应用上。(有点自恋地讲)程序中的注释可能比大部分的博客内容都多。希望大家能够多多捧场,如果可以的话,为我的github打颗星,也能让更多的人看到。

github:

GitHub|手写实现李航《统计学习方法》书中全部算法

相关博文:

  1. 统计学习方法|感知机原理剖析及实现
  2. 统计学习方法|K近邻原理剖析及实现
  3. 统计学习方法|朴素贝叶斯原理剖析及实现
  4. 统计学习方法|决策树原理剖析及实现
  5. 统计学习方法|逻辑斯蒂原理剖析及实现
  6. 统计学习方法|最大熵原理剖析及实现
  7. 统计学习方法|支持向量机(SVM)原理剖析及实现

 

 

正文

SVM的直观理解

在刚踏入机器学习世界时,经常会听到周围讨论SVM的声音,很多时候一讨论SVM,周围的人好像就会开始瞪大了眼睛看你,仿佛在说这你都能懂?当然了,这件事情也许是个个例,但确实在初学的我身边发生过几回。有趣的是,当大家都学会了SVM以后,反而讨论的人少了。

当我真正感觉到学会了SVM以后,我突然发现其实SVM也就那样。如果你再仔细回想一下,学习机器学习前是不是感觉人工智能好高大上,现在几个模型走下来,心里也就没有多大的波澜起伏了。

有感而发说起这些,想让读者在阅读前先知道,SVM不是什么很难的算法。当你跟着本文走完以后,可能会感叹一下前人的智慧,但绝不会仍然觉得这是一个很难的模型。

好了,我们正式开始。

机器学习算法中可以说预测一个样本所属的类是一件很重要的事情。我们在过去的几个模型中通常做法是给定训练集,划分超平面,预测样本所在类。那我们不得不重新拿出感知机中给出的这张图:

感知机和逻辑斯蒂都是属于划分一个超平面来对点进行划分的模型,就像图中蓝点和黄点中间的几条线一样。在当时我们也分析过,从图上直观来看,我们认为似乎蓝色的超平面更好一点,但实际上感知机和逻辑斯蒂回归都没有找到一个最佳的超平面,那么有没有一个办法去找到最好的这个蓝色的超平面呢?也就是说:

有没有一种算法能够找到最优划分超平面?

SVM可以,但在介绍SVM前,我们首先需要讨论一个问题:我们试图找到最优的超平面,但我们还没有给出过定义什么样的超平面是最优的。我们给出下面这张图:

图中有红蓝两类,分别标记为圆圈和方框。图中存在A、B、C三个超平面,很明显我们感觉A是三个超平面中最优的(实际上SVM找到的仍然不是一个最优的超平面,但一定在最优附近,本文的最优是相对于感知机、逻辑斯蒂等算法而言。望读者了解其中的细节),为什么最优?因为它与两个类的距离都足够大。那定义上的距离该怎么描述?

我们看上面这张图,也许可以给出这样一个定义:两个类中距离超平面最近的那个点的距离要足够大。比如说超平面C,距离1和6就太近了,B距离4和5太近了。怎么算太近?我们看A,最近的可能是4、5、1、2,很明显它们的距离都比B、C的大,所以A是最优的。

SVM就是基于这样一个理论,它试图去找到一个超平面,这个超平面可以使得与它最近的样本点的距离必须大于其他所有超平面划分时与最近的样本点的距离。在SVM当中这叫间隔最大化。

此外SVM还解决了一个问题,就是我们之前划分样本时解决背景是在可以用一个超平面划分的情况下。比如说在之前的例子中两类点是可以很明显分开的,那如果是下面这张图呢?

可能用一个线性的超平面就不太够了。所以我们的超平面是上图中的一个圆圈?这好像不太对劲。但是我们都知道样本中的每一个点都是真实的点,我们也许就在二维平面上表示是不太够的,也许我们在三维空间中将样本一个个地描述出来是下面这样的。

那在三维中我们依然可以用一个超平面去表示。读者可能要问:

你怎么就能确信在三维中一定是上面这张图?如果他们依然是像第一张图一样一类点在中间,另一类点像个篮球皮一样把它包住呢?

我当时也有这个疑惑,事实上我们可以想象一个情景:我们假想有一根棍子,但是它是垂直地对着你的眼睛的,只能看到棍子的一端,就好像有人拿着棍子指着你一样,你只能看到棍子的那个横截面。如果这是根透明的棍子,在棍子上分布着两个点,但是你从横截面看过去,只有一个点。这是一维的情况。

如果升到二维呢?就是对面拿着棍子那个人,把棍子横着给你看,整条根子就像线一样,那你就能很清楚地看到两个点。那有没有一维线性不可分,二维仍然线性不可分的情况呢?有。我们假想棍子里有10个点,5个红点5个黑点,但他们是交错排布的,在棍子中(红,黑,红,黑......红,黑)这样的顺序,我们仍然不能用一把刀把它们一切为二进行划分。

所以我们可以提升到三维,这时候棍子真的成了棍子,它有体积,它很长,同时是个圆柱体。如果把棍子竖直地放在地上然后仔细观察内部的10个点,也许我们会发现红点全在向南面,黑点全在向北面,这是我们可以拿把砍刀把棍子一劈为二,就能划分开来了。

那如果三维中仍然不线性可分呢?就好像上面的例子一样,红点在棍子内部正中间,黑点像个篮球皮一样把它包起来。这是完全可能存在的,所以我们需要到四维的情况下再去判断。

这就好像一场博弈,我们每失败一次,就升维一次,直到某一维N时两类点出现了一个失误,他们线性可分了。

这就是SVM解决线性不可分的过程,但它并不是逐渐升维的,而是直接上升到无穷维。

为什么是无穷维?

我们去找具体是第几维这种过程太复杂了,事实上我们的维度只需要大于等于N维就可以了,所以考虑到所有的应用场景、不同问题下的样本特征,我们直接上升到无穷维使得其必定可以线性可分。

为什么样本随着维度的升高一定是线性可分的?有没有存在无穷维也不可分的情况呢?

没有,样本之间只要存在差异,也就是说只要不是相同的样本点,一定能在某种程度上对其进行区分。就好像上面棍子的例子一样,我们无法划分,只是维度太低观察到的信息不够。随着维度的上升,我们的信息量越来越充足,只要是有差异的样本并且找到其差异,一定能够使用该差异来划分的。

为什么大于N维也可以?会不会存在大于N维的某一维又突然线性不可分了呢?

不会,就像上一个问题一样,当你在某一维突然获取到了能够划分样本的足够多的信息后,随着维度的上升,我们得到的信息量只会越来越多,而第N维的信息量就足够我们划分了,更多的信息量并不会出现问题中的这种情况。

 

写到这里,除了直观认知以外,我希望能用数学角度来阐述一下上面的问题。当然了,并不涉及公式,也许称为数学的直观角度更合理一点。

在讨论这种有趣的现象时,我希望能够将讨论限制在二维内,这样更直观,所以在二维中的划分超平面wx+b也许可以写成ax+b。我们无数次见过并且用过ax+b这个式子,那么下面这张图中的圆圈我们怎么表示呢?

为了方便讨论,我们假设上面的圆圈是个正儿八经地圆(虽然是个椭圆),圆心是坐标原点,直径为1,。那么它的公式是:x²+y²=1。

事实上我们不得不承认,如果划分超平面的公式是x²+y²=1,我们也能完美地划分这两类点不是吗?但是你发现一个有趣的事情没有,x的幂是平方了,也可以说,它升维了。

如果按照我们上面例子说的,在三维中x点在内部,O点像篮球皮一样包起来了呢?回忆一下x³+y³+z³=1。

变成三次方了,再次升维。

但是SVM实际上最后产出的超平面仍然是wx+b的形式,x仍然是1次方,问题在于我们上面的讨论是将超平面变形,但在SVM中,我们是将坐标轴变形,举个例子就像x轴上的每个数x转换成2x,那轴还是轴,但坐标轴中的图形在x轴方向上被压缩到了原来的1/2,坐标轴内的图形也就跟着变形了。

所以数学上来讲,SVM中升维的过程本质上是变换坐标轴,就好像捏橡皮泥一样不停地变换内部的图形,而升的维度越高,变形也就能越复杂。到最后也就越能直接线性可分。

 

总结一下,SVM通过上面的思路主要解决了两类问题:

1.寻找到最优的超平面

2.能够划分非线性可分的样本

 

SVM的数学角度(配合《统计学习方法》食用更佳)

在引出数学公式前,我们回忆一下上文中SVM寻找最优超平面的过程,其中涉及到了距离的计算。但凡涉及到距离,我们不得不谈一下几何间隔和函数间隔的差别。在感知机一节中我们已经提到过相关概念,但考虑到部分读者可能对其还不是很了解,因此简单做个介绍,如果阅读完还是感觉有些不太明白的,可以阅读感知器一节。

以划分超平面为原理支撑的模型通常会使用wx+b,用wx+b=0表示超平面。当要预测一个样本x1时,我们将其代入wx1+b通过结果的正负来判断是在超平面的左侧还是右侧。若结果为wx1+b=h,将h取绝对值后也就是该样本点与超平面之间的距离大小。

例如SVM我们虽然还不太清楚内部原理,但涉及到将超平面与样本点之间的间距最大化,我们假设间距为h,那么h=wx1+b,等同于在运算过程中一定会涉及将wx1+b最大化。同时我们一定要记住

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值