注:关于支持向量机系列文章是借鉴大神的神做,加以本身的理解写成的;若对原做者有损请告知,我会及时处理。转载请标明来源。html
我在支持向量机系列中主要讲支持向量机的公式推导,第一部分讲到推出拉格朗日对偶函数的对偶因子α;第二部分是SMO算法对于对偶因子的求解;第三部分是核函数的原理与应用,讲核函数的推理及经常使用的核函数有哪些;第四部分是支持向量机的应用,按照机器学习实战的代码详细解读。算法
机器学习之支持向量机(三):核函数和KKT条件的理解post
机器学习之支持向量机(四):支持向量机的Python语言实现学习
支持向量机是处理数据分类问题,目的是学会一个二分类的函数模型,属于监督式学习的方法,被普遍应用于统计分类和回归分析。经过创建一个超平面对样本数据进行分类,超平面涉及到凸优化及核函数的应用,而对于怎么找到最优的超平面就是这部分要讲的内容。优化
假设数据样本集是线性可分,即存在一个超平面将其分红两类。如下推导的过程都是基于线性可分,非线性分类是在线性分类加上一个松弛因子,下面开始线性分类的推导。atom
在以前的Logistic 回归算法中,咱们是把数据分红 0 和 1 ,而这里为了之后的推导式子的通用性,采用 -1 和 1 两类。分类函数为 f (x) = ωTx + b ,其中 ω = (ω1 ,ω2 ,... , ωn),x = (x1, x2 , ... ,xn)。通俗的讲支持向量机的解决的问题是找到最好的分类超平面,例如,在二维平面中其超平面就是一根直线,以下图所示在能将两类分开的直线中找到最佳的直线。评判直线的最佳的标准是:在能分类的状况下,样本点与直线的距离越远,说明直线就越佳。这就引出函数间隔和几何间隔对选取的直线的评判。spa
通常而言,一个点距离超平面的远近能够表示为分类预测的确信或准确程度。在超平面 wTx+b=0 肯定的状况下,|wTx+b| 可以相对的表示点x到距离超平面的远近,而 wTx+b 的符号与类标记 y 的符号是否一致表示分类是否正确,因此,能够用量 y(wTx+b) 的正负性来断定或表示分类的正确性和确信度。即,y(wTx+b) > 0 时分类正确;y(wTx+b) < 0 时分类错误。.net
超平面 f ( x ) 关于样本点(x (i) , y (i))的函数间隔:
对于样本集中的每一个样本点都与超平面有函数间隔,但只能选取最小值:
定义是为了最大化间隔,
表示关于超平面与训练集中样本的函数间隔最小值,下面只要最大化
便可。 注意到函数间隔实际上并不能表示点到超平面的距离,由于当超平面(ω,b)参数扩大相同的倍数后,如(2ω,2b),超平面的位置并无改变,可是函数间隔也变大了相同的倍数2γ^(i)。
如图所示,样本点A的坐标为 x (i) ,A 到超平面的垂直距离为 γ(i) ,超平面的单位法向量是 ω / || ω || ,B点是超平面上一点且是A点的投影,则 B 点的坐标 x(i) - γ(i) ω / || ω || ,将其带入超平面方程 f (x) = ωT x + b =0 .
若是分类正确,则 y(i) 与 f( x(i)) 符号相同,几何间隔是:
超平面与样本集的几何间隔是:
如上所述,函数间隔与几何间隔的关系有: , 若|| ω || = 1,那么函数间隔与几何间隔相同。
如今又进一步,由原来的求一个超平面到如今求超平面的最大间隔。经过函数间隔与几何间隔的定义知利用几何间隔衡量最佳的标准是合适的,由于几何间隔是真正意义上的距离,如同咱们求点到平面的距离同样:
接下来再介绍一个概念:支持向量。以下图所示,假设中间的红线是超平面,那么虚线上的样本点就是支持向量。
这样一来,咱们就能够定义间隔最大化:
max
须要知足的条件是:
间隔的有效的样本点是支持向量的点,便是符合函数间隔等于 1 的点。那么就能够对间隔的最大化能够为:
其中,s.t.,即subject to的意思,它导出的是约束条件。
由上面的式子通过变化,获得凸优化问题,即 将max 1/ || ω || 转化成求 min 1/2 || ω || 2 ,二者是等价的。
转化到这个形式后,咱们的问题成为了一个凸优化问题,或者更具体的说,由于如今的目标函数是二次的,约束条件是线性的,因此它是一个凸二次规划问题。这个问题能够用任何现成的QP的优化包进行求解,归结为一句话便是:在必定的约束条件下,目标最优,损失最小。
除了用解决QP问题的常规方法以外,还能够经过求解对偶问题获得最优解,这就是线性可分条件下支持向量机的对偶算法,这样作的优势在于:一者对偶问题每每更容易求解;两者能够天然的引入核函数,进而推广到非线性分类问题。
如今要对凸优化进行求解,如今给出的经验求解方法是,经过求解对偶问题获得最优解。对偶问题是什么?这就要引出拉格朗日函数,将约束条件融合到目标函数中,经过给每一个约束条件加上一个拉格朗日乘子 α 。
而后令:
如今咱们的目标函数变成了:
对这个公式的理解:在知足约束条件(即样本点为支持向量)下,最大的几何间隔中取最小的值。max L(w,b,a) 是获得支持向量的样本点,而后再这些样本点中找到min 1/2 || w ||2 的最小值(最大间隔)。
注意了,对偶问题出来了(p* 是原来的问题,d* 是对偶问题),将最小最大的位置交换,获得下面的式子:
交换以后的问题就不等价了,有如下关系:d* <= p* 。但在知足某些条件下(KKT条件),二者是相等的。如今咱们把对偶问题得出了,但怎么对偶问题进行求解呢?继续向下看,最终的目标式子就要出来了。
上述可知,原来问题与对偶问题的等价条件是知足某些条件,条件就是KKT 。不知道KKT 条件不要紧,如今你只须要明白原来问题是知足KKT条件,KKT 条件在核函数中讲解。而求解这个对偶学习问题,分为3个步骤:一、让L(ω, b, α)关于 ω 和 b 的最小化;二、求 α 的极大;三、利用SMO算法求解对偶因子(α)。这里主要讲1 和 2 ,步骤 3 在第二部分讲。
步骤 1 : 固定 α ,而后L(ω, b, α)对 ω 、b 求偏导,另其偏导数等于零。
把结果带入L:
获得:
其中的推导过程以下:
步骤2 :对 α 求极大,经过步骤 1 已经把 变量 ω 、b 消去,函数只有 α。
若是咱们把对偶因子求出,那么咱们就能够获得最佳的超平面 f (x) = ωT x + b ;
b 根据KKT条件 ,αi [ y(i)(ωTx(i) + b ) -1] =0, i =1, 2 ,..., m ,其中必然存在一个αj 不等于0 ,y(j)(ωTx(j) + b )=1 ,两边同乘以 y(j) 可得:
b = y(j) - Σi=1mαi y(i) x(i)x(j) , 也能够对全部知足条件的b加权平均。
到这里咱们把目标函数 f(x) 的求解转化成对对偶因子的求解,正如 July 大神总结的同样。下部分对SMO算法求解过程的推导。
机器学习之支持向量机(四):支持向量机的Python语言实现
参考:
支持向量机通俗导论(理解SVM的三层境界)http://blog.csdn.net/macyang/article/details/38782399/
【机器学习详解】SVM解二分类,多分类,及后验几率输出 http://blog.csdn.net/luoshixian099/article/details/51073885