支持向量机,从入门到精通
SVM简介与背景知识
通俗来说,支持向量机就是一个二分类问题,根据所给的训练集数据集进行将数据的最佳划分,以达到测试集的最佳分类。支持向量机也叫做SVM,在实际工业的运用中,有着很强的可靠性和广泛的使用。接下来我们就来具体介绍一下这么好用的算法。
所谓的二分类问题就是通过一条分割线来对数据进行分类,在二维情况下就是平面直角坐标系下的y=kx+b,当x的维度(对应与需要分类的条件,即属性增多的情况)大于等于2时,情况就上升的多维的情况,我们就引出了超平面的概念。当数据集带入线性可分的方程之后,通过判断y的值,进而对数据集进行划分。大于0则属于第一类,小于0属于第二类。需要指出的是,SVM是一个线性的分类问题,因为其简单所以大量应用,对于更复杂的问题,我们可以采用非线性的划分,但在这里不做讨论。
那么我们这么确定这条直线呢,确定的约束又是什么呢?
这里,我们就可以引出支持向量和支持向量机的概念了。
支持向量(support vector)就是离分隔超平面最近的那些点。接下来要试着最大化支持向量到分隔面的距离,需要找到此问题的优化求解方法。
支持向量机 :
优点:泛化错误率低,计算开销不大,结果易解释。
缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于处理二类问题。
适用数据类型:数值型和标称型数据
SVM的数学证明
在介绍完背景知识后,就可以引出公式和数学证明了。数学功底好的读者可以阅读本部分,了解其原理,如果只是想了解概念和代码的,可以跳过本部分,直接最后的算法和代码部分。
先给出点到直线的距离公式,以便后续的使用
我们指出,最佳的直线应该是最能分割数据集的点的直线,即使得直线的最近的数据点之间的距离要最大!所以我们主要就是对支持向量和最大间隔进行讨论。
上面就是两个方程组相减最为点到直线距离的公式的分母,因为结果为正,所以没有加绝对值
其中根据公式,wx=±1+b的,所以带入计算得结果为2(分子)
我们要使其最大,就要w最小也即0.5*w^2(w是一个向量),因此转化为求最小值的问题(带有约束条件)
因此我们就将问题转化为了一个带约束的二次规划问题,它是一个凸问题。而对于优化问题,我们可以使用拉格朗日乘子法去解决它。
接下来我们就对上述引出的拉格朗日函数进行分步骤求解,并最终导出公式
第一步,对自变量求偏导
在求出偏导方程之后,也就是取得极值时候的对应变量应取得的条件,把它带回原方程
现在回到问题的根本,我们的目标是求最小间隔的最大化问题
目前为止计算得出的是,对应w下,最小间隔,接着我们要计算α使得最小间隔最大化成立
下面再补充一些对偶问题的定理:
原问题:min x max a,b L(x,a,b)
对偶问题 max a,b min x L(x,a,b)
在普通的约束条件下,这两个问题的解满足性质:原问题>=对偶问题
特殊情况:当等号成立的时候,应满足如下四个条件
①方程对自变量x的求导方程=0
②约束条件αig(xi) = 0
③gi(x)<=0
④αi>=0
⑤约束条件是线性的
⑥原问题是一个凸问题
其中①-④为kkt条件
由于有了对偶定理的存在,就保证了分别求解max 和min之后问题的解是一样的
由对偶的性质,我们可以将其转换为对偶问题
这样,我们就完成了对最基本问题的求解,但它不适用与大多数情况,我们进行如下讨论。
其实在很多时候,不是在训练的时候分类函数越完美越好,因为训练函数中有些数据本来就是噪声,可能就是在人工加上分类标签的时候加错了,如果在训练(学习)的时候把这些错误的点学习到了,那么模型在下次碰到这些错误情况的时候就难免出错了。这种学习的时候学到了“噪声" 的过程就是一个过拟合(over-iting) , 这在机器学习中是一一个大忌, 宁愿少学-些内容, 也坚决杜绝多学-些错误的知识。
这种加入了惩罚函数的算法,才是最终我们代码里要介绍的简化版SMO算法,接下来我们就对其进行原理上的推导。
因此,我们的目标函数和约束条件就变成了下面的这个样子:
接下来我们对目标函数和约束条件进行进一步的化简,以便最终得出可执行的算法
简化版SMO算法
所谓的SMO算法就是序列最小最优化算法
其中,K11代表向量x1与x1点成的结果,或者表示输入为x1,x1的核函数的结果
上图还将目标函数的一系列求和部分用v1和v2代替了,读者注意一下这里的替换
接下来就对之前的v1和v2作具体的说明