[关闭]
@spiritnotes 2016-03-14T04:57:25.000000Z 字数 6577 阅读 2182

SVM算法总结

机器学习 算法


拉格朗日乘子法和KKT条件

凸函数

所谓凸函数就是指函数的开口只有一个,要么向上,要么向下。其满足如下公式



以下是对于函数以及的图示,两者都是凸函数
凸函数.png-20.7kB
而对于函数以及的图示,则不符合要求,不是凸函数
非凸函数.png-16.5kB

凸优化

由于函数是凸的,因此可以其要么只有一个最小值,要么就只有一个最大值(取决于凸的方向),因此求解该函数最小值和最大值的时候直接求导,就是全局最优解了。例如对于如下问题

则可直接通过求导可得

带约束的凸优化

如果在刚才的问题添加上约束条件,其解又会咋样呢?正常情况下,在本题中可以通过将x2和x3用x1表示代入方程进行计算。

而应用拉格朗日乘子法,就是求解如下问题

对其偏导可得
将其带回约束条件,即可求得进而求出最小值

针对f函数可以设想其等高线,而约束条件是一个平面,则其最优点即是平面与等高线相切的地方,如果是相交则其还有更小的等高线,由相切,则可知等高线和约束条件函数在该点具有相同的法向量。也即是说f的梯度与约束条件的梯度相同

KKT条件

如果约束条件是不等式怎么解决呢?假设有如下约束条件


那么由拉格朗日乘子法可转求该函数的最优解

其最优解必定满足如下几个条件
1.
2.
3. ,因为g(x)<=0,如果要满足该等式则必须要或者g(x)=0

函数变换
因为g(x)是小于0,而h(x)是等于0 的,所以我们通过调整可以得出下式
因此
对偶最优化
我们有
为了通过求解对偶问题来求解前问题,则必须要满足如下假设
f和g是连续函数;h必须是仿射函数;g是严格可行的,表示肯定存在x使得对于所有i,g_i(x)都小于0
满足上面条件则证明必定有同解,而解会还会满足Karush-kuhn-tucker(KKT)条件:
1.
2.
3.
4.
5.
理解
因为是同解的,
因为对偶式中对L求的是x的极小值,因此L对各个x求导为0,而由对偶式的最外层是求最大,如果有,则由约束条件其必定小于0,因此我们可以通过改变使其等于0以取得更大的值,因此有

线性支持向量机

线性分割平面与最大间隔

假设数据的分隔面是线性的,我们采用如下分离超平面

相应的分离决策函数就为
则可以计算样本点与超平面的函数间隔为
由于函数间隔与w的范数相关,w、b同时变更时,分割面未变化,而函数间隔却发生变化,因此引入几何间隔

硬间隔支持向量机

计算最大间隔

对于二分类问题,我们需要找到一个分割点使其完整的将数据划分成两类。我们设置分割平面为

在支持向量机这里我们则要求分割间隔最大,分割间隔如下
进一步变换
由于最大化与最小化是等价的,因此有:

拉格朗日函数

构建拉格朗日函数,引入

根据KKT条件的第一条,函数L对w/b求导为0


将结果代入L可得

变换

数据点分布

则有,数据位于边界上,为支持向量
则有,数据位于边界或者之外

求解决策函数

根据上式求得最佳

选择任一

软间隔支持向量机

引入松弛变量

对于线性不可分的数据集,则说明对于已划分好的分割超平面来说,某些点满足不了函数大于等于1的约束条件,为了解决这个问题,对于每个样本点引入一个松弛变量,这样使得函数间隔加上松弛变量大于等于1。约束条件就变为:


从该式中我们可以看到的取值情况对点位置的影响

引入惩罚参数C

同时对于引入的每个松弛变量,支付一个代价,则目标函数变为

从等式中可以看到分错的点和边界内的点越多,则的值就越大,因此C就相当于控制对分错点的容忍程度,如果C的值越大,则分类更严格,C变少,则通过将更多的放在边界内或分错而达到更大的分割间隔。

对偶算法

新的目标函数的拉格朗日函数如下


其对w/b/求导得

代入原式根据对偶问题可得

消除u可得

数据点分布

则分类正确
则有,数据位于边界上,为支持向量
则有,则需要根据的值进行判断

求解决策函数

根据上式求得最佳

选择任一

非线性支持向量机

核函数

SMO算法

根据上面的分析,实际上是求如下极值
约束条件



SMO方法是迭代方法,每次迭代调整分错的点直到收敛;在迭代过程中,会有3种点,第一种
- y(wx+b) > 1 已分对的点,其alpha为0,可以不调整
- y(wx+b) = 1 支持边界上的点

不满足条件的点:
yu <= 1 但是 alpha < C
yu >= 1 但是 alpha > 0
yu <= 1 但是 alpha = 0 或者 alpha = C

同时改变2个alpha

因为是求函数的最小值,核心思想是一次只在一个维度上使得函数最大化,其循环次数可能会较多,但是循环内部比较简单。由于约束存在则我们不可能一次只改变一个而满足等式,因此我们每次改变两个坐标。假设选择如下两个则有:

则最小值函数变为
可对其求导即可得的值,因为的取值有0到C的限制,因此选择合适的值,同时由于的取值限制,可能还需要再次调整的值(这里可以先通过的取值范围对的取值范围进行限制)

第一个alpha选择

第一个alpha就是选择样本点最不满足KKT条件的:

其中

优先选择位于0~C之间的点判断,再选择整个训练集

第二个alpha选择

第二个alpha选择的标准是希望alpha2有足够大的变化。由于alpha2是依赖于两个alhpa对应的点误差的绝对值,因此可以选择该值最大的。

代码实现

Github:https://github.com/spiritwiki/codes/tree/master/svm
coding.net:https://coding.net/u/spiritwiki/p/codes/git/tree/master/svm

线性分类

针对简单测试集其分类图如下
1.png-14kB
2.png-11.1kB
3.png-13kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注