SVM公式详解

点(x,y)到平面(w,b)的距离公式是:$\gamma=\frac{1}{||w||}y(xw+b)$。我们称之为几何间隔。另外$\hat{\gamma}=y(xw+b)$记为函数间隔。

SVM的基本思路就是,寻找一个能够正确划分数据集,并且几何间隔最大的超平面。这个目标可以表达为:

$$\max_{w,b}{\gamma} , \ s.t., \ \frac{1}{||w||}y_i(wx_i + b) \geq \gamma$$

可以改写为:

$$\max_{w,b}{\frac{\hat{\gamma}}{||w||}} , \ s.t., \ y_i(wx_i + b) \geq \hat{\gamma}$$

实际上,可以按比例将$w$和$b$改成合适的大小,使$\hat{\gamma}=1$,即

$$\max_{w,b}{\frac{1}{||w||}} , \ s.t., \ y_i(wx_i + b) \geq 1$$

最大化$\frac{1}{||w||}$和最小化$||w||$是一样的,也就是和最小化$\frac{1}{2}||w||^2$是一样的(这样方便后续计算),所以我们的目标函数变成了

$$ \min_{w,b}{\frac{1}{2}||w||^2} , \ s.t., \ y_i(wx_i + b) \geq 1 $$

但是这个带约束条件的优化很难求解,于是这里用到了拉格朗日对偶。定义拉格朗日函数:

$$L(w,b,\alpha)=\frac{1}{2}||w||^2 - \sum_{i}\alpha_i({y_i(wx_i + b)-1})$$ 其中$\alpha$是拉格朗日乘子

我们定义$\theta(w,b)=\max_{\alpha,\alpha \geq 0}{L(w,b,\alpha)}$,当${y_i(wx_i + b)-1} \leq 0$时,我们一定可以通过调整$\alpha$的值来是$\theta$为正无穷,这样我们把原问题转化为

$$\min_{w,b}{\theta(w,b)}=\min_{w,b}{\max_{\alpha,\alpha \geq 0}{L(w,b,\alpha)}}$$

这样的最小值一定满足那些约束条件。这里我们可以得到对偶问题:$\max_{\alpha,\alpha \geq 0}{\min_{w,b}{L(w,b,\alpha)}}$

这个对偶问题把w,b放在内层中,比较好求解。对于一般的问题,有$d \leq p$。对于满足强对偶条件的问题,有$d = p$,即原问题的解和对偶问题的解是一样的。

对于强对偶问题,$w^*,\alpha^*$是一组解的充要条件是满足下面的KKT条件:

$$\nabla_w L(w^*,\alpha_*)=0\\ \nabla_\alpha L(w^*,\alpha_*)=0\\ \alpha^* g(w_*)=0\\g(w_*) \leq 0\\ \alpha \geq 0$$

回到SVM的优化问题,由KKT条件可知,$\min_{w,b}{L(w,b,\alpha)}$的解满足

$\nabla_w L()=0 \Rightarrow w=\sum_{i}{\alpha_i y_i x_i}$,$\nabla_b L()=0 \Rightarrow \sum_i{a_i y_i}=0$

把w和b重新带入到L函数中,得到:$L(w,b,\alpha)=\sum_i{\alpha_i}-\frac{1}{2}\sum_{i,j}{y_i y_j \alpha_i \alpha_j (x_i)^T x_j} ,\ s.t. \ \alpha \geq 0, \sum_i{\alpha_i y_i}=0$

到这里,式子中只剩下了$\alpha$这一个变量。那么我们剩下的步骤就是求解$\max_{\alpha, \alpha \geq 0}{L(w,b,\alpha)}$。

一旦求出了$\alpha$,w可以通过$ w=\sum_{i}{\alpha_i y_i x_i}$得到,为了满足正负样本的支持向量到超平面的距离相等,b的值为$b=\frac{1}{2}(\min_{y_i=1}{wx_i} + \max_{y_i=-1}{wx_i})$

在讲如何计算$\alpha$的值之前,还要引入一个概念,那就是软间隔。我们之前讨论的情况都是建立在样例线性可分的假设上,当样例线性不可分时,我们需要将模型进行调整,以保证在不可分的情况下,也能够尽可能地找出分隔超平面。

$$\min_{\gamma, w, b}{\frac{1}{2}||w||^2+C\sum_i{\zeta_i}}, \ s.t. \ y_i(wx_i+b) \geq 1-\zeta_i, \zeta_i \geq 0$$

引入松弛变量$\zeta$之后,就允许某些样例的间隔小于1。C越大表示越不能接受离群点。再次建立新的拉格朗日函数:

$$L(w,b,\alpha)=\frac{1}{2}||w||^2 + C\sum_i{\zeta_i} - \sum_{i}\alpha_i({y_i(wx_i + b)-1+\zeta_i})-\sum_i{\beta \zeta_i}$$

由KKT条件可以知道,

$ \nabla_w{L}=0 \Rightarrow w=\sum_i{\alpha_i y_i x_i}\\ \nabla_b{L}=0 \Rightarrow \sum_i{\alpha_i y_i} = 0\\ \nabla_\zeta{L}=0 \Rightarrow \alpha_i = C- \beta_i\\ \alpha_i \geq 0, \beta_i \geq 0 \Rightarrow 0 \leq \alpha_i \leq C$

把w和b重新带入到L函数中,得到新的最优化函数:$\max_{\alpha}{L(w,b,\alpha)}=\sum_i{\alpha_i}-\frac{1}{2}\sum_{i,j}{y_i y_j \alpha_i \alpha_j (x_i)^T x_j} ,\ s.t. \ 0 \leq \alpha \leq C , \sum_i{\alpha_i y_i}=0$

下面开始讲如何计算$\alpha$的值——SMO算法。SMO算法是一种启发式算法,目标是使所有的$\alpha$满足KKT条件。为了达到这个目标,算法每次取两个变量,固定其它变量,每次只优化这两个变量。这个优化两个变量的子问题可以简单地通过求导的方法求解。这里为什么是两个变量?因为我们的约束条件中有$\sum_i{\alpha_i y_i}=0$,确定一个变量的时候,另一个变量也就随之确定了。

现在假设选择的两个变量是$\alpha_1, \alpha_2$,其它变量是固定的。于是最优化问题可以重写成:

$$\min_{\alpha}{L(w,b,\alpha)}=\frac{1}{2}K_{11}\alpha_1^2+\frac{1}{2}K_{22}\alpha_2^2+K{12} y_1 y_2 \alpha_1 \alpha_2 +y_1 v_1 \alpha_1 +y_2 v_2 \alpha_2 - \alpha_1 - \alpha_2 + (const)$$

其中$v_i = \sum_{j=3}{y_j \alpha_j K_{ij}}$。

另外还有:$y_1 \alpha_1 = -\sum_{i=3}{y_i \alpha_i} - y_2 \alpha_2 = D - y_2 \alpha_2$,D表示一个常数。把这个式子继续代入优化函数中:

$$L()=\frac{1}{2}K_{11}(D - y_2 \alpha_2)^2+\frac{1}{2}K_{22}\alpha_2^2+K_{12} y_1 y_2 (D - y_2 \alpha_2) \alpha_2 +y_1 v_1 (D - y_2 \alpha_2) +y_2 v_2 \alpha_2 -(D - y_2 \alpha_2) - \alpha_2$$

对$\alpha_2$求导数:

$\frac{\partial L}{\partial \alpha_2} = K_{11} \alpha_2 + K_{22} \alpha_2 - 2K_{12} \alpha_2 - K_{11} D y_2 + K_{12} D y_2 + y_1 y_2 - 1 - v_1 y_2 + v_2 y_2$

$\frac{\partial L^2}{\partial \alpha_2^2} = K_{11} + K_{22} - 2K_{12}$

一般情况下二阶导数大于0,当$x_1,x_2$完全相同时,会出现二阶导数等于0的情况,此时L是单调函数,最小值在边缘处取到,直接将左边缘和右边缘带入就可以知道哪个是最小值了。

考虑二阶导数大于0的情况,最小值在导数等于0的地方取到。通过简单计算可以得到,

$$\alpha_2^{new,unc}=\alpha_2^{old}+\frac{y_2(E_1-E_2)}{K_{11}+K_{22}-2K_{12}}$$

其中$E_i=wx_i+b-y_i=\sum_j{\alpha_j y_j K_{ji}}+b - y_i$

再来看$\alpha_2$的取值范围。假设$y_1=y_2$,有

$$\left\{ \begin{array}{lr} \alpha_1 + \alpha_2 = \alpha_1^{old} + \alpha_2^{old}, \\ 0 \leq \alpha_1 \leq C, & \Rightarrow max(0,a_2^{old}+a_1^{old}-C) \leq \alpha_2 \leq min(C, a_2^{old}+a_1^{old}-C)) \\ 0 \leq \alpha_2 \leq C, \end{array} \right.  $$

同理可以得到$y_1 \neq y_2$时候的范围。$max(0,a_2^{old}-a_1^{old}) \leq \alpha_2 \leq min(C, C + a_2^{old} - a_1^{old}))$

对之间求出来的$\alpha_2^{new,unc}$按照这个取值范围剪辑一下就能得到最后的$\alpha_2^{new}$。

在每次完成两个变量的优化之后,我们需要重新计算b。当$0 < \alpha_1 < C$时,由KKT条件可知:$0 < \alpha_1 < C \Rightarrow y_1(wx_1 + b) = 1 \Rightarrow \sum_i{\alpha_i y_i K_{i1} + b } = y_1$

于是,$b_1^{new} = y_1 - \sum_{i=3}{\alpha_i y_i K_{i1}} - \alpha_1^{new}y_1 K_{11} - \alpha_2^{new}y_2 K_{21}\\= -E_1 - y_1 K_{11}(\alpha_1^{new} - \alpha_1^{old}) - y_2 K_{21}(\alpha_2^{new} - \alpha_2^{old}) + b^{old}$

同理可以得到$b_2^{new}$

时间: 2024-09-29 08:42:24

SVM公式详解的相关文章

EasyPR--开发详解(6)SVM开发详解

在前面的几篇文章中,我们介绍了EasyPR中车牌定位模块的相关内容.本文开始分析车牌定位模块后续步骤的车牌判断模块.车牌判断模块是EasyPR中的基于机器学习模型的一个模块,这个模型就是作者前文中从机器学习谈起中提到的SVM(支持向量机). 我们已经知道,车牌定位模块的输出是一些候选车牌的图片.但如何从这些候选车牌图片中甄选出真正的车牌,就是通过SVM模型判断/预测得到的.   图1 从候选车牌中选出真正的车牌 简单来说,EasyPR的车牌判断模块就是将候选车牌的图片一张张地输入到SVM模型中,

sklearn系列之 sklearn.svm.SVC详解

首先我们应该对SVM的参数有一个详细的认知: sklearn.svm.SVC 参数说明: 本身这个函数也是基于libsvm实现的,所以在参数设置上有很多相似的地方.(PS: libsvm中的二次规划问题的解决算法是SMO). sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, cla

EasyPR--开发详解

我正在做一个开源的中文车牌识别系统,Git地址为:https://github.com/liuruoze/EasyPR. 我给它取的名字为EasyPR,也就是Easy to do Plate Recognition的意思.我开发这套系统的主要原因是因为我希望能够锻炼我在这方面的能力,包括C++技术.计算机图形学.机器学习等.我把这个项目开源的主要目的是:1.它基于开源的代码诞生,理应回归开源:2.我希望有人能够一起协助强化这套系统,包括代码.训练数据等,能够让这套系统的准确性更高,鲁棒性更强等等

SVM -支持向量机原理详解与实践之二

SVM -支持向量机原理详解与实践之二 SVM原理分析 以下内容接上篇. 拉格朗日对偶性(Largrange duality)深入分析 前面提到了支持向量机的凸优化问题中拉格朗日对偶性的重要性. 因为通过应用拉格朗日对偶性我们可以寻找到最优超平面的二次最优化, 所以以下可以将寻找最优超平面二次最优化(原问题),总结为以下几个步骤: 在原始权重空间的带约束的优化问题.(注意带约束) 对优化问题建立拉格朗日函数 推导出机器的最优化条件 最后就是在对偶空间解决带拉格朗日乘子的优化问题. 注:以上这个四

支持向量机(SVM)(五)-- SMO算法详解

一.我们先回顾下SVM问题. A.线性可分问题 1.SVM基本原理: SVM使用一种非线性映射,把原训练            数据映射到较高的维.在新的维上,搜索最佳分离超平面,两个类的数据总可以被超平面分开. 2.问题的提出: 3.如何选取最优的划分直线f(x)呢? 4.求解:凸二次规划 建立拉格朗日函数: 求偏导数: B.线性不可分问题 1.核函数 如下图:横轴上端点a和b之间红色部分里的所有点定为正类,两边的黑色部分里的点定为负类. 设: g(x)转化为f(y)=<a,y> g(x)=

机器学习经典算法详解及Python实现--基于SMO的SVM分类器

原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector machine,简称SVM.通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解. (一)理解SVM基本原理 1,SVM的本质--分类 给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些

SVM -支持向量机原理详解与实践之四

SVM -支持向量机原理详解与实践之四 SVM原理分析 SMO算法分析 SMO即Sequential minmal optimization, 是最快的二次规划的优化算法,特使对线性SVM和稀疏数据性能更优.在正式介绍SMO算法之前,首先要了解坐标上升法. 坐标上升法(Coordinate ascent) 坐标上升法(Coordinate Ascent)简单点说就是它每次通过更新函数中的一维,通过多次的迭代以达到优化函数的目的. 坐标上升法原理讲解 为了更加通用的表示算法的求解过程,我们将算法表

SVM -支持向量机原理详解与实践之三

SVM -支持向量机原理详解与实践之三 什么是核 什么是核,核其实就是一种特殊的函数,更确切的说是核技巧(Kernel trick),清楚的明白这一点很重要. 为什么说是核技巧呢?回顾到我们的对偶问题:     映射到特征空间后约束条件不变,则为:     在原始特征空间中主要是求,也就是和的内积(Inner Product),也称数量积(Scalar Product)或是点积(Dot Product),映射到特征空间后就变成了求,也就是和的映射到特征空间之后的内积,就如我前面所提到的在原始空间

详解MathType中如何批量修改公式字体和大小

MathType应用在论文中时,有时会因为排版问题批量修改公式字体和大小,一个一个的修改不仅费时费力,还容易出现错误,本教程将详解如何在MathType公式编辑器中批量修改公式字体和大小. MathType公式编辑器中批量修改公式字体和大小的操作步骤: 步骤一 双击论文中的任意一个公式,打开MathType公式编辑器软件. 步骤二 点击菜单栏中的大小->定义,打开“定义尺寸”对话框.如果使用的是英文版MathType,点击size->define即可. 步骤三 在“定义尺寸”对话框中,通过更改