作者:寒小阳
时间:2016年9月。
出处:http://blog.csdn.net/han_xiaoyang/article/details/52683653
声明:版权所有,转载请联系作者并注明出处
1.引言
是的,咱们第1篇blog介绍了目标;第2篇blog介绍了向量相关的背景数学知识,看到了如何求解Margin的值;今天这个部分主要目的是和大家一起来看看,选择最优超平面的推理过程。
以下是本篇的一个简短目录:
- 如何找到最优超平面
- 如何计算两超平面间的距离
- SVM的最优化问题是什么
2.如何找到最优超平面
在第2篇blog的结尾我们计算了点 A 到超平面间的距离
有些情况下我们得到的超平面能够很好地完成不同类别样本点的分隔,但是却不是最佳的超平面。比如以下这个超平面是第2篇blog中求解出来的超平面。
![cmd-markdown-logo](https://i-blog.csdnimg.cn/blog_migrate/c45e184216e4fd2192a9f7647b78cc83.png)
然而第1篇blog的内容告诉我们,最优超平面是一个与数据点有最大间隔的平面。在上图中我么可以看到 M1 间隔(仔细看,没有过G点),在两条蓝线之间,它不是完美分类数据点的最大间隔。最大间隔为 M2 ,如下图所示:
![cmd-markdown-logo](https://i-blog.csdnimg.cn/blog_migrate/e8fea79f0878e445849e45b2f9b868c1.png)
可以在上图中看到最优超平面,在我们找的最初的超平面的稍左位置,而它刚好是M_2的中点处的这条垂线。所以在SVM当中,超平面和间隔确实是密切相关的。
只要找到一个分隔超平面,我就能计算平行于这个超平面的间隔。得到间隔之后,就能通过它的中点找到另外一个超平面(比如上图的中间蓝色直线)。
- 寻找最大间隔,就是寻找最优超平面
3.我们如何找到最大间隔
说起来这个过程还挺简单的:
- 读取你的数据集。
- 找到两个平行超平面,可以划分数据并且两平面之间没有数据点。
- 最大化上述两个超平面间隔
OK,按照上面的步骤,咱们一步步看吧。
步骤1:读取想分类的数据集
大多数时候,你会遇到二分类问题(多分类问题可以转化成二分类问题解决),数据将由n个向量 xi 组成。
每一个 xi 与一个值 yi 相关联, yi 代表元素属于类(-1)或类(+1)。请注意, yi 只能有两个可能的值 -1或1。
而且,大多数时候,比如当你做文本分类,向量 xi 有很多维度,我们可以说,X是一个p维向量(如果总共p维)。所以你的数据集 是n个元素 (xi,yi) 对组成的集合。
在集合论中的初始数据集的更正式的定义是:
步骤2:找到两个平行超平面,可以划分数据并且两平面之间没有数据点。
在平面上划线来区分数据很容易。但很多情况下数据是高维的,划分数据就变得困难,因为你没办法把它画出来。(对了,即使你的数据是二维的,也有可能找不到分离超平面!只有在数据线性可分时,这样一条线才能找到。)
![cmd-markdown-logo](https://i-blog.csdnimg.cn/blog_migrate/df2b3ac28d4a6fa591282292c9935450.png)
线性可分 与 非线性可分
因此,假设我们的数据集 是线性可分的。怎么找超平面呢?回到超平面方程:
我们在之前看到过超平面的方程可以写做
不过细心的同学,会在 维基百科中的SVM中看到下面的描述:
任何超平面都可以写成 满足 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)