SVM原理
首先需要知道支持向量机的分类:
线性可分支持向量机
这种向量机是属于最为理想的状态,满足两个条件,线性和可分。
线性支持向量机
这种向量机则允许出现一些错误的数据点
非线性支持向量机
这种向量机就是能够处理非线性的数据,通过特征映射的方式将非线性的数据信息转化为线性可分的数据,然后再利用向量机进行分类。
简单的理解表现在二维平面上就是线性的分类方式为一条直线,而非线性的分类方式为一条曲线。
函数间隔与几何间隔:
参数说明
线性核:
C参数越来越大,分类的界面越来越窄,表明使用了越来越少的样本来做分类,有可能导致过拟合,但是C值越大,能使得训练精度变高。实际中需要确认想要的目标是训练精度高,还是泛化能力强的问题
高斯核:
γ足够大的话,分界曲面靠近于训练数据,换句话说,总是可以将γ值取得足够大的话,使得它的分类准确度是百分之一百
当γ足够小的时候,高斯核就退化成为了线性核 当γ足够大的时候,高斯核就退化成为了K近邻
SVM优化问题推导
假设在一个平面中,存在两个类别的样本,并且是可分的,那么一定可以找到无数条直线将其分开。存在一条直线可以将其分开,并且这条直线离样本的距离是最大的。
下面我们通过一个实际的表达式来推到到数学上的表达式
接下来我们要考虑的是如何衡量样本属于正例还是负例呢?
但是这个公式中包含了一个绝对值让人很讨厌,我们要想办法去掉绝对值。
那么我们要的目标是什么呢?
我们希望的是能够找到一个分割面,二维的话就是一条直线,能够使得样本离这条直线的距离最大。
那么在训练过程中,我们首先需要找到的是离分界面距离最小的那个样本,然后使得这个样本到超平面的距离达到最大,表达成数学式子如下:
最终我们得到SVM的目标函数为:
拉格朗日乘子法和KKT条件
引入拉格朗日乘子,将优化函数写成:
化简一下可以得到:
将这两个结果带入先前的拉格朗日函数中:
其中限制条件为:
那么如何高效地解出这个式子呢?需要用到SMO算法,但是在介绍SMO之前,先来看下线性不可分的数据场景下,SVM要怎么处理。
线性支持向量机
若数据线性不可分,或者存在一个样本点使得最终的结果泛化能力降低,那么可以增加松弛因子来解决这个问题。
这里的C为一个超参数,保证》0
实际上最终我们得到的松弛因子就是损失,前面的是1/2 |w| 2是一个L2的正则项
SVM存在的问题:
训练样本不能太大,否则训练速度很慢
SVM的优点有:
SVM本身基本一定的防止过拟合的能力
SVM可以用来划分多分类吗?
可以,两个方法,一是直接多分类,时间复杂度是K方乘以一个SVM的时间复杂度和1 vs 1的分类器是一样的,二是使用1 vs rest / 1 vs 1
神经网络也可以处理非线性问题,为什么去全连接层换成SVM的效果会更好呢?在这个问题上SVM会有优势吗?
SVM会更好一点,因为它天然地加入了一点防止过拟合的东西,可能会好一些
一个softmax回归就是一个神经网络
为了减轻噪声样本对SVM的影响,那么就把C调小,使得泛化能力提高
SMO算法
我们根据拉格朗日得到的对偶形式如下:
然后我们的工作是进行求导:
然后我们可以得到的是:
下一步我们要对原始解进行裁剪
为什么需要裁剪呢?是因为我们的计算得到的原始解可能会超出上面的限制条件规定的范围:
根据上面的上下界可以得到:
更新阈值b
其中上式中的前两项可以写成:
至此,关于SVM所需要的参数我们都可以计算出来了。
参考文献
[1]邹博.机器学习升级版.小象学院,2018.
[2]秦曾昌.机器学习算法精讲.小象学院,2018.
[3]李航.统计学习方法[M].北京:清华大学出版社,2012.
[5]Bishop.Pattern Recognition And Machine Learning,
Last updated