SVM(支持向量机)总结

SVM知识点总结

1:几何间隔和函数间隔

假设叉号对应的点标签y=1,圈对应的点的标签y=0,我们可以得到一个分类界面能够将两类数据分开。当处理未知数据A,B,C的时候,很显然,判断A为y=1这一类的置信度(confident)应该比判断C为y=1这一类的置信度高,而B的置信度介于两者之间。因此,我们可以知道,如果某个点距离分类界面越远的话,预测结果的置信度越高。

函数间隔(functional margin)的定义如下:

当 y=1时(真实标签),如果wx+b足够大的话,那么整个函数间隔就足够大,说明预测是准确并且置信度很高(confident and correct),同理,如果y=-1时,预测结果wx+b为负数,并且足够大的话,函数间隔也大,代表置信度高的预测。

函数间隔能够用于衡量预测的置信度(confident of prediction),但是也存在一个问题,就是当缩放分类界面的参数w和b时,函数间隔会等比例的缩放,造成函数距离无意义的增加,为了解决这个问题,几何间隔定义如下: 

我们定义一个集合S={x1,x2,...,xn}的函数距离为整个集合函数距离的最小值 :

2:最大距离分类器

如上面所说,如果一个分类器能够使得一个集合S的几何间隔(geometric margin)尽可能的大的话,那么该分类器对于集合S的判断的置信度越大,因此我们就希望找一个分类界面,能够最大化几何间隔。

因此,最初的目标函数如下:

其中||w||=1,所以几何间隔等于函数间隔,r代表函数间隔。因为r代表集合S的最小的函数间隔,因此其余所有节点的函数间隔都要大于r。

如果上面的式子能够直接优化的话,w,b结果就是我们最终的结果。但是||w||=1这个条件不好优化,因此将上面的式子转化为下面的形式:

 任意缩放w,b不会导致集合距离改变,cs229课程笔记里面有一段话是这样说的:

通过缩放w和b,可以实现任意关于w的限制,因此,为了方便优化,我们通过缩放w,b,使得集合S的函数距离等于1,变为下面的形式:

上面的目标函数按理应该是max 1/||w||,和上面的目标函数是等价的。 

3:目标函数求解

对于一个带约束的优化问题:

我们构造成如下形式:

如果我们求解上式的最优参数,如下:

我们可以得到下面的结果:

也就是说,最大化L的最优 解等价于f(w)的最优解,因此目标函数变为了:

当满足kkt条件的时候,下面的不等式取等号:

KKT条件如下:

使用KKT条件,我们可以得到:

 

因此优化目标变成了:

使用SMO算法能够得到最优的α,此时w,b, α都得到了。现在看一下分类界面的形式:

当给我们一个新的样本点x的时候,我们计算x与其余点的内积得到wx+b的结果,如果大于0,那么我们判断y=1,小于0我们判断y=-1。又因为,通过KKT条件我们知道,α*g(x)=0,因为除了支持向量(wx+b=1)外,其余点wx+b>1,因此g(x)>0,因此 这些点的α等于0,因此当给一个新的样本点的时候,我们只需要计算它和支持向量的内积,使用上式就能求得wx+b的结果。

4:改进

为了使得分类器对于一些异常点(outlier)能够有比较好的处理,对原始的目标函数进行如下优化:

对w,b求偏导等于0之后

 

使用同样的方法对上式进行优化,可以得到分类界面的参数。 

使用核函数(kernel method)可以增强SVM对于线性不可分的数据的分类能力,那么如何选择kernel method?我认为,因为不同的核函数,实际上对应的是不同的映射函数,比如说多项式核对应下面的映射函数:

下面的多项式核对应另外一种映射函数:

高斯核对应一个无穷维度的映射函数:

 

那到底怎么选择合适的核函数呢,下面是https://www.quora.com/How-do-I-select-SVM-kernels中的解答,我认为说的比较好,1:高斯核使用的是欧氏距离作为相似度度量形式,而其他的核函数,比如说线性核,多项式核等等,使用的是内积作为相似度度量形式,因此,如果我们事先知道使用哪种相似度函数进行度量比较好的话,我们就可以选择不同的核函数,比如说hash编码一般使用汉明距离进行度量,而汉明距离和内积成反比,因此使用线性核,多项式核等可能会有比较好的结果;

2:高斯核具有平移不变性(translation incariance),并且是归一化的(K(x,x)=1),因此从很多情况中得出高斯核一般是效果最好的;

3:对于一个特定的问题怎么选择适当的核函数,还是需要尝试不同的核函数,然后选择效果最好的;

高斯核实际上衡量的是新来的数据和每个样本的距离,c=0的多项式核(如上)使用任意两个维度的积作为新的特征。

吴恩达的机器学习课程上对于如何选择核函数有一些经验:

假设N代表数据维度,M代表样本个数:

1:当N很大,M小的时候:因为N很大,M很小,因此我们希望模型尽可能的简单,因为我们没有足够多的数据可以用来训练模型,因此直接使用线性核:(也就是不使用核函数,直接使用内积)。

2: 当N比较小,M比较大的时候,可以使用高斯核来增加非线性可分性。在使用高斯核之前,一般需要进行归一化,使得不同维度之间具有相近的scale.

使用逻辑回归和不带核函数的SVM的一个区别就是,SVM是比较耗时的,当M比较大的时候,计算的复杂度很大。SVM和神经网络的区别就是,SVM一般解决的是一个凸优化问题,因此通常都能达到全局最优解,而神经网络可能会陷入局部最优问题。 

6:SVM的另一种形式

上面的最小化式子也是SVM的一种目标函数,Andrew Ng在说的是,这个式子是从逻辑回归转化过来的,我想说的主要有一下四点:

1:在逻辑回归中,后面的正则化项的目的是为了防止过拟合发生,在SVM中,通过前面的公式我们可以知道,后面的关于θ的正则化项实际上是为了保证几何间隔更大,使得分类界面更好,实际上这也是一种防止过拟合的情况,因为分类界面的几何间隔小的话,对于未知的样本来说,效果本来就可能很差;

2:上面的式子和我们使用拉格朗日构造的min max L形式上不一样,实际上是共通的,因为max L如果满足的话,也就是说所有的条件都满足的话,该式子可以写成上图蓝色部分的形式,和上面推导的公式就吻合了;

3:这里的C实际上目的是控制几何间隔(正则化项)和正确分类的权重,如果C设置很大的话,那么目标函数就侧重与保证所有样本正确分类,如果设置的小的话,就保证几何间隔尽可能的大,因此可以出现一些错分的情况;

4:上面的SVM形式没有保证所有样本都被正确分类,而前面的使用KKT条件求解的参数,是保证了所有样本都正确分类。

这是SVM的另一种表现形式,提供了另一种理解,当xi在θ方向上的投影比较小的时候,||θ|| 就比较大。这和几何间隔的结论一致,几何间隔等于r/||θ||,||θ||越小的话,几何间隔越大,分类界面越好。

https://scikit-learn.org/stable/modules/cross_validation.html#cross-validation里面有一个SVM分类的小例子。使用scikit-learn的SVM模型需要指定C以及核函数,如果是高斯核,还需要设定方差。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值