1 什么是支持向量机?
支持向量机,support vector machine,支持向量机模型是指由支持向量支撑的模型,在这个模型中,仅支持向量起到作用,而非支持向量对模型没有作用。
假设此时是一个而二维平面,我们需要将+和-点分开,显然这条线很多种可能,那么我们要找到最优的那条边界,那么这条边界的定义就是离这个边界最近的点,使得这个点离边界最远。
通俗的将就是找离这条先最近的点,得到距离L,那么我们希望这个L越大越好。
这条线就叫做决策边界。通过决策变量,此时就可以将将两组样本分割开来。
那么上下两条边界插过的点就叫做支持向量,图中3个支持向量。
2 支持向量的作用
真正发挥作用的点只有那么几个,这就是支持向量,显然,支持向量机的一大特点就是可以应用到小样本集合上。
另外,通过二维推广到三维,通过升维,可以将一些在低维空间中不可分的数据集合分离开来,因为更高的维度更容易找到一个超平面,将样本分开,那么低维不可分问题就可以通过提升维度,映射到高维度上去了。
3 如何实现支持向量机
本质上还是机器学习的套路做法,找到目标函数,通过数学推导,迭代,找到极值点。
3.1 目标函数
通俗的讲:找到一条线(w,b),使得离该线最近的点能够足够远。回归到问题的本身,我们是要找到一条直线(w和b),使得离该线最近的点能够最远。
求解到的点到直线的距离,其中包含了一个绝对值:
为了去除绝对值,我们引入了,得到:
由于
- 放缩变换:对于决策工程(w,b)可以通过放缩使得其结果值|Y|>=1,在3.1中我们已经得到了|Y|>0,那么通过放缩
*N
,我们可以使得|Y|>=1,
(之前我们认为恒大于0,现在严格了些) - 优化目标:
上面的公式中,有两个求解,一个是min,一个是max。
min:找到离决策边界最近的那个样本。min里面就是距离公式,这里就是找最近的样本点。离决策边界最近的那个样本点。
max:得到这个点之后,我们再去求什么样的w和b,使得雷离我们的决策边界越大越好。
总结两点:
1)求距离决策边界最近的点
2)求w,b,使得1)求得的点离决策边界最远
上面我们提到了可以通过缩放,让
那么此时我们可以认为,那么目标函数就变为:
也就是说,现在目标是找到w使得这个目标函数最大。
3.2 目标函数求解
这里目标函数是求解max也就是最大值,但是机器学习中都是求解最小值的,所以说,我们还是要转化为求解极小值的问题。
求的最大值,就是求的最小值。之前的假设是这个目标函数的前提:
求解的极小值可以认为是求解的极小值,前面的1/2是为了后面方便求导用到。
如何求解这个极小值问题?应用拉格朗日乘子法。
就是为了求解极值的方法。这里直接使用。
拉格朗日乘子法subject to是约束条件。
其中
表示有m组约束条件,从
到
。
注意:
后面的其实和上面的限制是类似的,这是改了变量而已。
注意,上面的约束条件有两类,所以我们在应用拉格朗日乘子法的时候,我们需要将我们的约束条件转换成这种。
1)
2)
这个时候,将目标函数和约束条件合并后,得到了一个新的目标函数,这个时候我们求解这个函数的极值点。由于我们要求最小值,所以求最小值。
由于不太好求解,那么我们可以换一种思路,也就是求解一个和w有关的变量,使得得到最小值,最后得到w。(就是绕了一下)
现在变为求解一个中间变量以及中间变量和w的关系。
应用了拉格朗日乘子法,首先变换我们的约束条件:
此时应用拉格朗日乘子法,得到我们的公式:
其中是一个系数。
(约束条件不要忘了:,这个约束条件无论什么时候都不能忘记)
此时原来的目标函数就转换到了一个拉格朗日乘子法的求解了。
利用KTT,本质上就是一个对偶性质:
这个时候,从对w求偏导对公式可以得到w取值,那么我们之前提到过,求w不容易,我们可以先求一个中间值,这个值和w有关系。就是这里的,其中,是每个样本数据的系数,这就是我们的中介,我们就转化成了求解。
对b求偏导,这个时候,由于b是一次项,那么b求导后=1,那么得到的偏导数就没有b了,这个相当于一个条件了。也就是,也就是和之间的关系。
得到偏导数后,代入原来的公式中。
将w代入上面的公式:上述在第二步的时候代入。代入后得到以下化简后的公式,后面半部分为了区分,将后面的那个求和公式改为j=1
再来提醒一下,这里求到了的拉格朗日乘子法的公式
现在就剩下了,我们还是要继续求解下去,什么样的能使的L最小,并且将这样的代入到公式中。
max求解
不要忘记,里面的min求解完了,外面还有一个max求解,也就是求解什么样的使得目标函数最大。而相应的就转换到中介变量了。第一个公式中没有了,对这样的公式我们要求极大值:问题转换为什么样的使得值最大
注意,还有限制条件:第一个条件是对b求偏导得到的;而第二个条件是拉格朗日乘子法使用的前提,所有的必须都大于等于0。
,
那么,这一步求解之后,我们的可以求得了,而是已知的,所以我们也可以得到。
我们继续求解,求解是一个比较难的问题。这里还可以继续使用拉格朗日乘子法进行求解。
那么求解大致就到这里了。