机器学习算法拾遗:(一)支持向量机(SVM)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38358305/article/details/88970453

参考:支持向量机

面试问题:SVM面试问题

使用:sklearn的SVM使用

1、感知机模型

分类模型:

sign函数是指示函数(当wx+b > 0,f(x) = +1;当wx+b < 0,f(x) = -1 ;感知机的超平面是wx+b = 0)

即:整合成 y(wx+b) > 0

损失函数:

扫描二维码关注公众号,回复: 5900546 查看本文章

2、支持向量机

几何间隔:基于感知机,γ是离超平面最近的点的到超平面的几何间隔

函数间隔:将几何间隔用函数间隔替代

函数间隔的取值是会随着w,b 成倍数变化而变化的,并不会影响最终的结果,因此令γ(帽子) = 1即:

原始问题:

支持向量机的第一个亮点:最大化间隔,最大化间隔能使得分类更加精确,且该最大间隔超平面是存在且唯一的。

1/2||w||2 是凸函数,同时约束不等式是仿射函数,因此这是一个凸二次规划问题,根据凸优化理论,我们可以借助拉格朗日函数将我们的约束问题转化为无约束的问题来求解。

即优化函数:

根据拉格朗日的对偶性,可以将原始问题转化为对偶问题(只要对偶问题存在,对偶问题的最优化解就是原问题的最优化解,一般对偶问题都比原始问题更容易求解)极大极小问题:

先对w,b求导求极小问题, 可以得到w,b的值:

将求得的解代入到拉格朗日函数中,可以得到下面的优化函数(将代入后原本的求α 的极大问题转换成了极小问题):

假设最终求得的α 的值为α*,则w,b可以表述成:

引入KTT条件(KTT条件是上面拉格朗日函数求最优解的必要条件):

支持向量机的第二个亮点:w,b 参数只与满足 yi(w*xi + b*) - 1 = 0 的样本有关,而这些样本点就是离最大间隔超平面最近的点,我们将这些点称之为支持向量。

3、软间隔最大化

约束条件变为:

目标函数中加入对松弛变量的惩罚项,惩罚参数C > 0,目标优化函数变为:

因为整个求解的原始问题可以描述为:

采用和之前同样的求解方法,利用拉格朗日将约束问题转化为无约束的问题,将原始问题转化为求极大极小问题的对偶问题:

和第二部分中的结果唯一不同的是αi 的取值范围多了一个上限C 值,对于软间隔最大化时,其支持向量描述要复杂一些,因为其支持向量可以在间隔边界上(如下图中的虚线),也可以在间隔边界和超平面之间,或者在分离超平面误分的一侧。

4、合页损失函数

 合页损失函数又称为hinge 损失函数,其表达式如下:

  

  因此我们上面的优化问题可以描述为:

  

注意在这里即使样本分类正确,但是间隔小于1 的也会计入损失,这就是支持向量机的苛刻性

5、线性不可分

支持向量机的第三个亮点:在不需要将样本映射到高维空间,而利用核函数解决非线性分类问题 。

K( xi · xj ) = ϕ(xi) · ϕ(xj) 替换內积 xi  · xj ,有理论证明当这样的函数是存在的(Mercer定理已证明),我们将其称为核函数。

常见的几种核函数:

  1)线性核函数

  线性核函数很好理解,只能用来处理线性问题,其表达式如下:

  

  因此我们可以将线性SVM和非线性SVM放在一起,只需要通过设定核函数和处理它们

  2)多项式核函数

  

  其中的 a,c,d 的值都是需要我们去通过调参设置的。

  3)径向基核函数(RBF核)

  径向基核函数也称为高斯核函数

  

  参数较少,只需要自己去设置参数 σ

  4)Sigmoid 核函数

  K(x, y) = tanh (ax · z + r)

       需要设置调试的参数 a,r, 其中 tanh 函数双曲正切函数,也被常用来作神经网络中的激活函数。

6、总结

  总的来说,在集成算法和神经网络风靡之前,SVM 基本上是最好的分类算法,但即使在今天,它依然占有较高的地位。

  SVM 的主要优点有:

  1)引入最大间隔,分类精确度高

  2)在样本量较小时,也能准确的分类,并且具有不错的泛化能力

  3)引入核函数,能轻松的解决非线性问题

  4)能解决高维特征的分类、回归问题,即使特征维度大于样本的数据,也能有很好的表现

  SVM 的主要缺点有:

  1)在样本量非常大时,核函数中內积的计算,求解拉格朗日乘子α 值的计算都是和样本个数有关的,会导致在求解模型时的计算量过大

  2)核函数的选择通常没有明确的指导,有时候难以选择一个合适的核函数,而且像多项式核函数,需要调试的参数也非常多

  3)SVM 对缺失数据敏感 (好像很多算法都对缺失值敏感,对于缺失值,要么在特征工程时处理好,要么使用树模型)。 

猜你喜欢

转载自blog.csdn.net/qq_38358305/article/details/88970453
今日推荐