作者:寒小阳
时间:2016年9月。
出处:http://blog.csdn.net/han_xiaoyang/article/details/52683653
声明:版权所有,转载请联系作者并注明出处
是的,咱们第1篇blog介绍了目标;第2篇blog介绍了向量相关的背景数学知识,看到了如何求解Margin的值;今天这个部分主要目的是和大家一起来看看,选择最优超平面的推理过程。
以下是本篇的一个简短目录:
- 如何找到最优超平面
- 如何计算两超平面间的距离
- SVM的最优化问题是什么
在第2篇blog的结尾我们计算了点 A 到超平面间的距离 ∥p∥ ,然后计算间隔为 2∥p∥ 。
有些情况下我们得到的超平面能够很好地完成不同类别样本点的分隔,但是却不是最佳的超平面。比如以下这个超平面是第2篇blog中求解出来的超平面。
然而第1篇blog的内容告诉我们,最优超平面是一个与数据点有最大间隔的平面。在上图中我么可以看到 M1 间隔(仔细看,没有过G点),在两条蓝线之间,它不是完美分类数据点的最大间隔。最大间隔为 M2 ,如下图所示:
可以在上图中看到最优超平面,在我们找的最初的超平面的稍左位置,而它刚好是M_2的中点处的这条垂线。所以在SVM当中,超平面和间隔确实是密切相关的。
只要找到一个分隔超平面,我就能计算平行于这个超平面的间隔。得到间隔之后,就能通过它的中点找到另外一个超平面(比如上图的中间蓝色直线)。
- 寻找最大间隔,就是寻找最优超平面
说起来这个过程还挺简单的:
- 读取你的数据集。
- 找到两个平行超平面,可以划分数据并且两平面之间没有数据点。
- 最大化上述两个超平面间隔
OK,按照上面的步骤,咱们一步步看吧。
大多数时候,你会遇到二分类问题(多分类问题可以转化成二分类问题解决),数据将由n个向量 xi 组成。
每一个 xi 与一个值 yi 相关联, yi 代表元素属于类(-1)或类(+1)。请注意, yi 只能有两个可能的值 -1或1。
而且,大多数时候,比如当你做文本分类,向量 xi 有很多维度,我们可以说,X是一个p维向量(如果总共p维)。所以你的数据集 是n个元素 (xi,yi) 对组成的集合。
在集合论中的初始数据集的更正式的定义是:
在平面上划线来区分数据很容易。但很多情况下数据是高维的,划分数据就变得困难,因为你没办法把它画出来。(对了,即使你的数据是二维的,也有可能找不到分离超平面!只有在数据线性可分时,这样一条线才能找到。)
因此,假设我们的数据集 是线性可分的。怎么找超平面呢?回到超平面方程:
我们在之前看到过超平面的方程可以写做
任何超平面都可以写成 满足 w⋅x−b=0 的点 x 的集合
首先,本文采用 w⋅x 代替 wTx 。然后,关于 −b 的部分,是这样的。
在我们的定义中,向量w与x有三个维度,但在维基百科中是二维的:
给出两个三维向量 w(−b,−a,1) 与 x(1,x,y)
给出两个二维向量 w′(−a,1) 和 x′(x,y)
现在如果我们在方程(2)的两边减去b得到:
对于这篇文章的剩余部分,我们将使用二维向量(如方程(2))。
给出一个超平面 H0 划分数据集并且满足:
我们选择其他两个划分数据集的超平面的 H1 和 H2 ,有如下的方程:
设定 δ 与 −δ 的原因是为了让 H0 与 H1 和 H2 等距。
不过再仔细想想,你会发现 w 和 b 是可以缩放的,这里的变量 δ 其实是没有必要的,为了简化(不引入那么多未知数),我们通过一定的缩放,让 δ=1 来简化问题。OK,所以我们有了一下形式的2个超平面:
还有一个事情咱们得确认一下:它们之间没有任何的数据点。我们只选择那些符合以下两个约束的超平面:
对于每一个向量 xi
满足
咱们来试着理解一下上面的约束,在下面的图中,所有的红点都是 1 类,所有的蓝点都是 −1 类。
因此,让我们看看下面的图,并考虑点 A ,它是红的所以是 1 类,我们需要验证它不违反约束 w⋅xi−b≥1
当 xi=A 我们看到超平面上的点满足 w⋅xi−b=1 ,同样的B点也是。
当 xi=C 我们看到超平面上的点满足 w⋅xi−b>1 ,同样的D、E、F、G点也是。
类似的,对于 −1 类的点也满足约束。
在下图,我们看到一对超平面满足约束:
比如下面是一些不满足约束条件的情况情况:
当不满足约束时,很清楚能看到超平面之间有了数据点。
OK,所以到此为止,我们找到了一个约束条件–从而能够选择两个中间没有数据点的超平面。当然,这里举得例子是二维平面的,而实际上对于更高维的空间也是成立的。
大家总是喜欢更精简的表达形式,所以我们结合一下两种约束。
方程 (4) 和 (5) 可以合并成一个单一的约束,我们从方程 (5) 开始
这意味着方程式 (5) 可以写做:
在方程 (4) 中,因为y_i =1,它不改变不等号方向。
OK,我们得到了一个很简洁的约束条件(方程8),它和方程4,5在数学上是等价的,也能保证两超平面间没有数据点。
哈哈,大家稍微提起一点精神吧,这是本节内容中最难的部分。不过会尽量写细一点,相信大家,应该没啥问题的。
a)我们的两个超平面之间的距离是什么
OK,现在要做的事情是最大化两个超平面之间的距离,那两个超平面之间的距离怎么计算呢?好,一步步来,我们先做一些标定:
- 0 是满足约束 w⋅x−b=−1 的超平面
- 1 是满足约束 w⋅x−b=1 的超平面
- x0 是 0 上的一点
对了,从 x0 到超平面 1 的垂直距离m就是我们所说的间隔。 x0 在超平面 0 上,所以m是超平面 0 与 1 间的距离。
我们现在试着找出m的值。
感觉上 x0 如果和另一个超平面距离m的话,我们加上m应该会得到另一个超平面上的点。
不过m是一个标量, x0 是一个向量,在一个向量上加一个标量的运算是完成不了的。那我们将m变换成一个向量,我们将能够做一个加法。
我们可以找到距离 x0 为m的所有的点,大家都知道,它是下图这样的一个圆:
OK,结合这张图,你就更清楚了,我们有长度m而缺少另外一个向量的关键信息:方向。
OK,标量加向量是没法算了,但大家都知道,向量乘以标量,会得到另外一个缩放后的向量。
OK,所以我们其实是想要找到这样一个向量:
- 长度为m
- 方向垂直于平面 1
仔细看看超平面的形式,我们发行已经有一个垂直 1 的向量,是 w (因为 1 为 w⋅x−b=1 )
我们定义 u=w∥w∥ 是 w 的单位向量,即 ∥u∥=1 ,且它和 w 有相同的方向,垂直于平面 1 。
如果我们用 u 乘以 m ,得到向量 k=mu ,让k满足:
- ∥k∥=m
- k 垂直于 1 ,因为它与 u 具有相同方向
那 k 就是我们正在寻找的向量。
对,就是通过这样一个方式把m转换成一个可以和向量 x0 相加的向量 k 。
如果我们在向量 x0 上加上 k ,可以得到向量 z0=x0+k (终点在超平面 1 上),如下图所示
z0 在 1 上意味着
我们可以用 x0+k 代替 z0
用方程式 (9) 替代 k
将式子展开可得
向量与自己的内积是它的模的平方,所以:
因为 x0 在 0 上,所以 w⋅x0+b=−1 ,带入:
OK,赞,我们找到了一种计算 m 的方法
b) 如何最大化两个超平面之间的距离
我们现在有一个公式来计算间隔:
在这个公式中,我们唯一可以改变的变量是 w 的模。比如:
当 ∥w∥=1 时, m=2 ;
当 ∥w∥=2 时, m=1 ;
当 ∥w∥=4 时, m=12 ;
大家很容易发现, w 的模越大,间隔越小。
最大化间隔也就是最小化 w 的模。
我们的目标是最大化间隔。在所有满足约束条件超平面中,我们选择有最小 ∥w∥ 的超平面,因为这意味着有最大间隔。
有了以下的优化问题:
解决这个问题有点像求解方程。一旦解出来答案,我们会找到满足约束条件,也使得 ∥w∥ 最小的值对 (w,b) 。对,你可以把它叫做最优超平面的方程!
这篇博客做了一个小小的推导,最后得到的结论是:为了找到最优超平面,咱们需要解决一个优化问题。优化问题有点棘手,可能又需要一些额外的数学知识来解决他们。感兴趣的同学继续follow[第4部分:]吧。