支持向量机

一、是否线性可分的问题

考虑图6-1中,A-D共4个方框中的数据点分布,一个问题就是,能否画出一条直线,将圆形点和方形点分开呢?

比如图6-2中,方框A中的两组数据,它们之间已经分隔得足够开,因此很容易就可以在图中画出一条直线将两组数据点分开。在这种情况下,这组数据被称为线性可分数据。 

 

二、 分隔超平面的定义

上述将数据集分隔开来的直线称为分隔超平面(separating hyperplane)。在上面给出的例子
中,由于数据点都在二维平面上,所以此时分隔超平面就只是一条直线。但是,如果所给的数据
集是三维的,那么此时用来分隔数据的就是一个平面。显而易见,更高维的情况可以依此类推。
如果数据集是1024维的,那么就需要一个1023维的某某对象来对数据进行分隔。这个1023维的某
某对象到底应该叫什么?

我们称该对象被称为超平面(hyperplane),也就是分类的决策边界。分布在超平面一侧的所有数据都属于某个类别,而分布在另一侧的所有数据则属于另一个类别。我们希望能采用这种方式来构建分类器,即如果数据点离决策边界越远,那么其最后的预测结果也就越可信。

考虑图6-2框B到框D中的三条直线,它们都能将数据分隔开,但是其中哪一条最好呢?是否应该最小化数据点到分隔超平面的平均距离来求最佳直线?如果是那样,图6-2的B和C框中的直线是否真的就比D框中的直线好呢?如果这样做,是不是有点寻找最佳拟合直线的感觉?

是的,上述做法确实有点像直线拟合,但这并非最佳方案。我们希望找到离分隔超平面最近的点,确保它们离分隔面的距离尽可能远。这里点到分隔面的距离被称为间隔。我们希望间隔尽可能地大,这是因为如果我们犯错或者在有限数据上训练分类器的话,我们希望分类器尽可能健壮。
 

三、支持向量机

支持向量(support vector)就是离分隔超平面最近的那些点。支持向量机(Support Vector Machine,SVM),是一种监督式学习模型的算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。

接下来要试着最大化支持向量到分隔面的距离,需要找到此问题的优化求解方法。

 四、寻找最大间隔

如何求解数据集的最佳分隔直线?先来看看图6-3。分隔超平面的形式可以写成wTx+b。要计
算 点 A 到 分 隔 超 平 面 的 距 离 , 就 必 须 给 出 点 到 分 隔 面 的 法 线 或 垂 线 的 长 度 , 该 值 为|wTA+b|/||w||。这里的常数b类似于Logistic回归中的截距w0。这里的向量w和常数b一起描述了所给数据的分隔线或超平面。接下来我们讨论分类器。

五、分类器求解的优化问题

输入数据给分类器会输出一个类别标签,这相当于一个类似于Sigmoid的函数在作用。下面将使用类似阶跃函数的函数对wTx+b作用得到f(wTx+b),其中当u<0时f(u)输出-1,反之则输出+1。

这里的类别标签为什么采用1和+1,而不是0和1呢?这是由于-1和+1仅仅相差一个符号,
方便数学上的处理。我们可以通过一个统一公式来表示间隔或者数据点到分隔超平面的距离,同
时不必担心数据到底是属于-1还是+1类。

当计算数据点到分隔面的距离并确定分隔面的放置位置时,间隔通过label * (wTx+b)来
计算,这时就能体现出-1和+1类的好处了。如果数据点处于正方向(即+1类)并且离分隔超平
面很远的位置时, wTx+b会是一个很大的正数,同时label*(wTx+b)也会是一个很大的正数。而
如果数据点处于负方向(-1类)并且离分隔超平面很远的位置时,此时由于类别标签为1,则
label * (wTx+b)仍然是一个很大的正数。
现在的目标就是找出分类器定义中的w和b。为此,我们必须找到具有最小间隔的数据点,而
这些数据点也就是前面提到的支持向量。一旦找到具有最小间隔的数据点,我们就需要对该间隔
最大化。这就可以写作

直接求解上述问题相当困难,所以我们将它转换成为另一种更容易求解的形式。首先考察一下上式中大括号内的部分。由于对乘积进行优化是一件很讨厌的事情,因此我们要做的是固定其中一个因子而最大化其他因子。如果令所有支持向量的label*(wTx+b)都为1,那么就可以通过求||w||-1的最大值来得到最终解。

但是,并非所有数据点的label*(wTx+b)都等于1,只有那些离分隔超平面最近的点得到的值才为1。而离超平面越远的数据点,其label*(wTx+b)的值也就越大。在上述优化问题中,给定了一些约束条件然后求最优值,因此该问题是一个带约束条件的优化问题。

这里的约束条件就是label*(wTx+b)≥ 1.0。对于这类优化问题,有一个非常著名的求解方法,即拉格朗日乘子法。通过引入拉格朗日乘子,我们就可以基于约束条件来表述原来的问题。由于这里的约束条件都是基于数据点的,因此我们就可以将超平面写成数据点的形式。于是,优化目标函数最后可以写成:


 

 其约束条件为:

至此,一切都很完美,但是这里有个假设:数据必须100%线性可分。目前为止,我们知道
几乎所有数据都不那么“干净”。这时我们就可以通过引入所谓松弛变量(slack variable),来允
许有些数据点可以处于分隔面的错误一侧。这样我们的优化目标就能保持仍然不变,但是此时新
的约束条件则变为:
 

这里的常数C用于控制“最大化间隔”和“保证大部分点的函数间隔小于1.0”这两个目标的权重。在优化算法的实现代码中,常数C是一个参数,因此我们就可以通过调节该参数得到不同
的结果。一旦求出了所有的alpha,那么分隔超平面就可以通过这些alpha来表达。这一结论十分
直接, SVM中的主要工作就是求解这些\alpha _{i}

六、 LIBSVM的使用步骤

1)准备数据集,转化为 LIBSVM支持的数据格式 :
[label] [index1]:[value1] [index2]:[value2] ...
即 [l类别标号] [特征1]:[特征值] [特征2]:[特征值] ...
2)对数据进行简单的缩放操作(scale);
3)考虑选用核函数(通常选取径函数,程序默认);
4)采用交叉验证(一般采用5折交叉验证),选择最佳参数C与g ;
5)用得到的最佳参数C与g 对整个训练集进行训练得到SVM模型;
6)用得到的SVM模型进行测试
 

参考:

看了这篇文章你还不懂SVM你就来打我 - 知乎

支持向量机通俗导论(理解SVM的三层境界)_v_JULY_v的博客-CSDN博客

看了这篇文章你还不懂SVM你就来打我 - 知乎
https://www.cnblogs.com/jiahuiyu/p/5415939.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值