1. 支持向量机(SVM)原理

1. 前言

在我没有学习接触机器学习之前,我就已经听说了SVM这个机器学习的方法。SVM自它诞生以来就以优秀的分类性能牢牢占据了霸主地位。

2. SVM原理

支持向量机(Support Vector Machine, SVM)的基本模型是在特征空间上找到最佳的分离超平面使得训练集上正负样本间隔最大。SVM是用来解决二分类问题的有监督学习算法,在引入了核方法之后SVM也可以用来解决非线性问题。

2.1 感知机

回想我们之前的一篇文章感知机,感知机的原理是通过找到一条直线,能够把数据分开。如果提升到高纬,就是找到一个超平面,把高纬数据分开。感知机的超平面可能有无穷多个,SVM可以理解为在这无穷多个里面找出最好的那个。

2.2 函数间隔与几何间隔

  • 函数间隔
    函数间隔其实就是感知机的损失函数的表达形式,可以表示位
    \[ \gamma^{'} = y(w^Tx + b) \]
  • 几何间隔
    几何间隔才是点到超平面的真正距离,是每个点到超平面的距离,也就是函数间隔除上法向量。
    \[ \gamma = \frac{y(w^Tx + b)}{||w||_2} = \frac{\gamma^{'}}{||w||_2} \]

3. SVM模型

先直接看下SVM的模型图:

image

如上图所示,分类超平面\(w^Tx+b=0\)不仅可以把所有样本分开,还和最近的样本点(支持向量)保持一定的函数距离(我们认为这个函数距离为1),那么这样的分类超平面是比感知机的分类超平面更好的。可以证明,这样的超平面只有一个。

4. SVM的损失函数

SVM的模型是让所有点到超平面的距离大于一定的距离,也就是所有的分类点要在各自类别的支持向量两边。用数学式子表示为:

\[ max \;\; \gamma = \frac{y(w^Tx + b)}{||w||_2} \;\; s.t \;\; y_i(w^Tx_i + b) = \gamma^{'(i)} \geq \gamma^{'} (i =1,2,...m) \]
一般我们都取函数间隔\(\gamma^{'}=1\),这样我们的优化函数定义为:

\[ max \;\; \frac{1}{||w||_2} \;\; s.t \;\; y_i(w^Tx_i + b) \geq 1 (i =1,2,...m) \]
上式等价于:

\[ min \;\; \frac{1}{2}||w||_2^2 \;\; s.t \;\; y_i(w^Tx_i + b) \geq 1 (i =1,2,...m) \]

4.1 拉格朗日乘子法对偶问题

由于目标函数\(\frac{1}{2}||w||_2^2\)是凸函数,同时约束条件不等式是仿射的,根据凸优化理论,我们可以通过拉格朗日函数将我们的优化目标转化为无约束的优化函数,

\[ L(w,b,\alpha) = \frac{1}{2}||w||_2^2 -\sum\limits_{i=1}^{m}\alpha_i[y_i(w^Tx_i + b) - 1] \; \; s.t. \; \alpha_i \geq 0 \]
我们的这个优化函数满足KKT条件,也就是说,我们可以通过拉格朗日对偶将我们的优化问题转化为等价的对偶问题来求解:

\[ \underbrace{min}_{w,b}\; \underbrace{max}_{\alpha_i \geq 0} L(w,b,\alpha) \]
从先求最大值再求最小值转化为先求最小值再求最大值,如下

\[ \underbrace{max}_{\alpha_i \geq 0} \;\underbrace{min}_{w,b}\; L(w,b,\alpha) \]
然后通过偏导数对\(w,b\)求极值带入公式得到如下公式

\[ \underbrace{min}_{\alpha} \frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}\alpha_i\alpha_jy_iy_j(x_i \bullet x_j) - \sum\limits_{i=1}^{m} \alpha_i \]

$$
s.t. ; \sum\limits_{i=1}^{m}\alpha_iy_i = 0

\alpha_i \geq 0 ; i=1,2,...m
$$
只要我们可以求出上式极小化时对应的\(\alpha\)向量就可以求出\(w\)\(b\)了。具体怎么极小化上式得到对应的\(\alpha\),一般需要用到SMO算法,这个算法比较复杂,我们后面会专门来讲。

5. 总结

线性可分SVM的学习方法对于非线性的数据集是没有办法使用的,有时候不能线性可分的原因是线性数据集里面多了少量的异常点,由于这些异常点导致了数据集不能线性可分, 那么怎么可以处理这些异常点使数据集依然可以用线性可分的思想呢? 我们在下一节的线性SVM的软间隔最大化里继续讲。

(欢迎转载,转载请注明出处。欢迎沟通交流: [email protected]

猜你喜欢

转载自www.cnblogs.com/huangyc/p/9931233.html