上篇博客中我们讲到了支持向量机的基本型:

那么我们如何解出参数和
。很明显上述是带有约束条件求最小值,这个时候我们想到拉格朗日乘子法(博主没记错的话,高数中有)。
拉格朗日乘子法
问题描述:

这是在等式的情况下,求出函数的最小值, 具体的意义可以详细见:https://zhuanlan.zhihu.com/p/76501152,博主直接说方法和步骤,说来惭愧,在我学习拉格朗日乘子法的时候只知道如何去解,具体的数学意义并不清楚,但是看了提供的这个链接,会发现并不难理解,有兴趣的可以去看看,如果只是想知道步骤就没必要看了。
拉格朗日乘子法的做法就是定义一个新的拉格朗日函数:,然后我们对其中的
分别求偏导,然后让其导数等于0,就可以解出
,将这样求解出的
代入
,这个时候的
的值就是我们要的最小值。这个是在等式约束条件下的解法,但是我们的支持向量机的基本型是在不等式的约束条件下,那么如何去解呢???
这个时候我们看个例子:

如上图,假设我们要求当的时候,原点离h(x)的最短距离的那个点,假设原点到
平面的这个距离函数为f(x),我们要求f(x)的最小值。其中蓝色部分为
的可行域(这个词要知道了,高中时候的知识),那么我们分为两种情况。
第一种情况,所求的点在的内部,这个时候很明显我们其实是找不到最优解的,那么这个时候最优解就相当于没有了这个约束条件。此时的拉格朗日函数
,其中
。
第二种情况,所求的点在的边界上,这个时候的约束条件就是等式的约束条件,回到了我们最开始的解题步骤,将
求导,然后令其等于0,可以得到:

博主看到的是说这种情况下f(x)的梯度和h(x)的梯度相反,这样的话如果要满足上面的等式,必须大于0。我们看下个例子帮助我们理解:

如图所示,要想求出原点到h(x)的最短距离,我们只需要以原点为圆心,画圆直到与h(x)相切,那个切点就是我们求的点,博主的个人理解就是的梯度是红色箭头,指向可行域,而f(x)的梯度指向原点,因为我们希望求的是f(x)的最小值,以原点为中心作的切线圆越接近原点越好,当然不希望是个扩大的形式,所以从这样看,f(x)的梯度和g(x)的梯度相反,可能我理解的不够准确,如果大家有更好的理解方法,可以一起交流。
如此就引入了KKT的条件:

关于是对应上我们刚刚分析的两种情况,大家往上翻翻。这个就是拉格朗日乘子法的一般步骤,回到我们的支持向量机,我们要解决的是:

同样我们构建上述问题的拉个朗日函数:

这个应该不难理解,有累加的运算是因为有多个类别,相当于我们有多个约束条件而已。这样我们使对参数
和
的偏导为0,可以得到:

我们再代会到支持向量机的基本型中,也就是求:

其中:

还有满足的KKT条件:

那么如何在当前的约束条件下去求解我们的目标函数,SMO算法是著名的求解这类问题的代表。大家有兴趣可以看看https://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html,涉及到了太多的数学背景,一句两句扯不清楚,这里博主就先溜了,如果大家对上述的理解和博主不一样,欢迎评论留言,一起交流。
本文介绍了如何使用拉格朗日乘子法解决支持向量机的基本型问题,讨论了在等式和不等式约束条件下的解法,并通过实例解释了KKT条件在支持向量机中的应用。最后提到了SMO算法作为求解此类问题的方法。
6万+

被折叠的 条评论
为什么被折叠?



