预备知识:一定的线性代数和高数基础,了解支持向量机问题的由来。
原始问题
n维度指的是样本的特征有n个。
在上图中,𝜔表示的是权向量,其中𝜔={𝜔1,𝜔2……𝜔n},我们想知道𝜔什么时候使得1/2||𝜔||^2最小。
下面有个约束条件,x表示样本向量,是一个n维向量。b为偏置量,为标量,𝜔^T表示转置。
在以后出现的公式中,没有出现下标i的均指的是n维向量,出现下标i的表示其中一个数值。
拉格朗日
上图出现了极值问题和约束条件,利用高数知识,可以想到构造拉格朗日函数解决问题。
α*表示lagrange乘子,有没有 * 都是一样的意思。
这个拉格朗日可以转化为以下对偶问题:
max α表示,以α为自变量,找后面那一串的最大值,再转化一下思路,把符号变号,改为min α,现在是求最小值了,表示如下:
对偶问题和原始问题的关系
原始问题如下:
下面的解全部都指的是唯一最优解。
简单点说,对偶问题和原始问题的解在它们(两个问题之间)强对偶的时候是一致的(一致表示在对偶问题求出来的解可以变换回原始问题,得到原始问题的解),并且它们在大部分情况下是强对偶的,那它们的解大部分情况下,我们可以认为是一致的。简而言之,对偶问题和原始问题的解大部分情况下我们可以看成一致的,求对偶问题即是求原问题。
对偶问题往往还是凸优化问题,它的解好求,那我们就求它就可以了。
KKT条件
参考视频:https://www.bilibili.com/video/BV1HP4y1Y79e/?spm_id_from=333.337.search-card.all.click&vd_source=75ec9431ead32617ba0eff5f105564b6
KKT条件包括以下几个部分:
- 原始问题的约束条件:这指的是原优化问题中的约束条件,可以是等式也可以是不等式。
- 对偶问题的约束条件:在构建拉格朗日函数时引入的对偶变量(或称为拉格朗日乘子)需要满足的条件。
- 互补松弛条件:这一条件说明了原问题的不等式约束和对应的拉格朗日乘子之间的关系。对于每个不等式约束,要么该约束是活跃的(即等式成立),要么对应的拉格朗日乘子为零。
- 梯度为零条件:在最优解处,目标函数的梯度加上所有活跃不等式约束的梯度与对应的拉格朗日乘子的乘积必须为零。
KKT条件就是必要条件——是对偶问题的解的必要条件,这个必要条件我们大部分时候当做充要条件去使用。
所以流程就是 原始问题的解 => 大部分情况 和对偶问题的解是一致的 => kkt条件又来约束对偶问题的解 =>最终,kkt条件大部分情况下可以约束原始问题的解。
通过KKT条件,我们就可以筛选出满足最优解的条件的 那些 α* ,它们对应着样本,称这些样本为支持向量。其它的α*为0。
解题
我们首先用对偶问题求解极值点(求偏导数),然后根据KKT条件挑那些有用的α*,再用下面的公式算出结果w(多维矩阵)。
知道对偶问题的最优解,我们可以求原始问题的解,关系如下:
实际上,可以按如下改写:
再算b*,已知
那么,SVM的判别函数,就可以写成下面这样:
按照如下流程解题:
例子
软间隔
为了实现软间隔,也就是允许一定的点进到隔离带中,我们会加个惩罚因子,这样来容忍一定的误差
基本思想:权衡训练误差和测试误差,得到最优超平面
后面再如法炮制,得到如下的对偶问题:
惩罚因子不一定要相同:
引入核函数
参见我的另一篇博客:http://t.csdnimg.cn/ik9hB