机器学习(九):支持向量机SVM
一,前言
从学习机器学习到现在,也实现了大大小小得多个算法了。下面便会对机器学习中较为出名的一种算法SVM进行原理阐述和理论推导。可能内容比较多,还需要慢慢查看。
二,SVM是什么?
SVM的英文全称是Support Vector Machines,我们叫它支持向量机。支持向量机是我们用于分类的一种算法。让我们以一个小故事的形式,开启我们的SVM之旅吧。
在很久以前的有两个小孩在玩分类小游戏,游戏规则是用一根小棒将两种不同颜色的小球分成两个部分。第一个小孩有规律地在桌子上。
另一个小孩很快地就将两个分类完成。
于是小孩又在桌上放了更多的球,似乎有一个球站错了阵营。显然,另一个小孩需要对棍做出调整。
小孩思考了一会,很快地得出了答案。
放球的小孩不开心了,于是将两种颜色的小球随便洒在了桌面上,如图所示:
放棍子的小孩看到这个,无论如何也不能用一根棍子将其划分,一着急,将桌子一拍,球都飞到了空中,恰好的,小孩突然发现将一张纸插到两种球的中间
放球的小孩从上往下看,看到的就是一条曲线:
再之后,这个故事流传千古。无聊的大人们,把这些球叫做data,把棍子叫做classifier, 找到最大间隙的trick叫做optimization,拍桌子叫做kernelling, 那张纸叫做hyperplane。
概述一下:
当一个分类问题,数据是线性可分的,也就是用一根棍就可以将两种小球分开的时候,我们只要将棍的位置放在让小球距离棍的距离最大化的位置即可,寻找这个最大间隔的过程,就叫做最优化。但是,现实往往是很残酷的,一般的数据是线性不可分的,也就是找不到一个棍将两种小球很好的分类。这个时候,我们就需要像大侠一样,将小球拍起,用一张纸代替小棍将小球进行分类。想要让数据飞起,我们需要的东西就是核函数(kernel),用于切分小球的纸,就是超平面。
三,线性SVM
先看一下线性可分的二分类问题
上图中的(a)是已有的数据,红色和蓝色分别代表两个不同的类别。数据显然是线性可分的,但是将两类数据点分开的直线显然不止一条。上图的(b)和©分别给出了B、C两种不同的分类方案,其中黑色实线为分界线,术语称为“决策面”。每个决策面对应了一个线性分类器。虽然从分类结果上看,分类器A和分类器B的效果是相同的。但是他们的性能是有差距的,看下图:
在"决策面"不变的情况下,我又添加了一个红点。可以看到,分类器B依然能很好的分类结果,而分类器C则出现了分类错误。显然分类器B的"决策面"放置的位置优于分类器C的"决策面"放置的位置,SVM算法也是这么认为的,它的依据就是分类器B的分类间隔比分类器C的分类间隔大。这里涉及到第一个SVM独有的概念"分类间隔"。在保证决策面方向不变且不会出现错分样本的情况下移动决策面,会在原来的决策面两侧找到两个极限位置(越过该位置就会产生错分现象),如虚线所示。虚线的位置由决策面的方向和距离原决策面最近的几个样本的位置决定。而这两条平行虚线正中间的分界线就是在保持当前决策面方向不变的前提下的最优决策面。两条虚线之间的垂直距离就是这个最优决策面对应的分类间隔。显然每一个可能把数据集正确分开的方向都有一个最优决策面(有些方向无论如何移动决策面的位置也不可能将两类样本完全分开),而不同方向的最优决策面的分类间隔通常是不同的,那个具有“最大间隔”的决策面就是SVM要寻找的最优解。而这个真正的最优解对应的两侧虚线所穿过的样本点,就是SVM中的支持样本点,称为"支持向量"。
四,公式推导
1.数学建模
求解这个"决策面"的过程,就是最优化。一个最优化问题通常有两个基本的因素:
- 目标函数,也就是你希望什么东西的什么指标达到最好;
- 优化对象,你期望通过改变哪些因素来使你的目标函数达到最优。
在线性SVM算法中,目标函数显然就是那个"分类间隔",而优化对象则是决策面。所以要对SVM问题进行数学建模,首先要对上述两个对象(“分类间隔"和"决策面”)进行数学描述。按照一般的思维习惯,我们先描述决策面。数学建模的时候,先在二维空间建模,然后再推广到多维。
(1)“决策面”方程
二维空间下一条直线的方式如下所示:
y = a x + b y = ax+b y=ax+b
将原来的x轴变成 x 1 x_1 x1,y轴变成 x 2 x_2 x2:
x 2 = a x 1 +