王老头

导航

SVM支持向量机原理

原文链接:http://www.cnblogs.com/pinard/p/6097604.html

关于SVM算法的一些碎碎念:

7.1 线性可分支持向量机与硬间隔最大化

支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。

包括线性可分支持向量机(硬间隔),线性支持向量机(软间隔)及非线性支持向量机(核函数)。

函数间隔:一个点距离超平面的远近,注意还带符号,表示分类的正确性(符号)和确信度(远近),其值随着w和b可变。

几何间隔:这里我们对w加上约束,如规范化||w|| = 1使得间隔是确定的,即几何间隔是不变的。

通过间隔最大化得到SVM的最优化问题,为了求解将其转换为对偶问题,这样做的优点:一是对偶问题往往更容易求解,二是自然引入核函数,进而推广到非线性分类问题。

根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题:maxaminw,bL(w,b,a),所以为了得到对偶问题的解,需要先求L(w,b,a)对w,b的极小,再求对a的极大。

这里对L(w,b,a)求极小,得到只含有a的函数,然后对L(w,b,a)求极大,得到a的值,反过来由KKT条件得到w和b,进而得到分离超平面。

7.2 线性支持向量机与软间隔最大化

约束条件和目标函数都加上松弛变量,同样转换为对偶问题进行求解。

7.3 非线性支持向量机与核函数

核技巧应用到支持向量机,基本思想就是通过一个非线性变换将输入空间对应于一个特征空间,使得在输入空间的超曲面模型能够对应与特征空间的超平面模型(支持向量机)。

核技巧的想法是:在学习与预测只定义核函数K(x,z),而不显式地定义映射函数。即学习是隐式地在特征空间进行的,不需要显式地定义特征空间和映射函数。

在实际应用中,往往依赖领域知识直接选择核函数,核函数的选择需要通过实验验证。

自己的一些问题总结:

1. 李航书P129处SVM中给出的三个KKT条件的解释??

详细见:https://blog.csdn.net/wjj5881005/article/details/52371279

 

2. 关于SMO算法中第一个变量以及第二个变量选择的问题??

答:第一个变量:简单说选择违反KKT条件最严重的变量,因为我们的目标就是希望把所有违反KKT条件的样本都纠正回来,这样如果所有样本都满足KKT条件的话,优化目标就完成了。

第二个变量:简单说是在第一个变量选择完成之后,需要选择第二个变量使得代价函数最大,就是可以更快的收敛来达到接近优化目标。

启发式选择,主要思想是先选择最有可能需要优化(也就是违反KKT条件最严重)的αi,再针对这样的αi选择最有可能取得较大修正步长的αj

详细见:https://www.cnblogs.com/nolonely/p/6541527.html

 

3. 如何理解违反KKT条件最严重的样本最先要检查在间隔边界上的支持向量点,然后再遍历整个训练集??

答:因为在间隔边界上的支持向量点可能更需要得到调整,边界数据样本常常不能得到进一步调整而继续留在边界上,这是由于对应的α乘子一旦取得零值就无需再调整。遍历边界数据样本并选出当中违反KKT 条件为止。

我的理解:因为间隔边界上的支持向量点最终影响最后的超平面的,因此必须先纠正边界上的支持向量点使其满足KKT条件。

 

4. 如何理解最后在精度ε范围内检查是否满足终止条件??

答:因为要完全满足KKT条件是个很苛刻的条件,我们允许在一定范围内达到收敛即算满足KKT条件。某一轮迭代更新的变化(|Ei|)小于ε,那说明我们已经差不多找到了局部最优解了,可以停止迭代了。

一旦所有变量都满足KKT条件,那么就没有必要对其进行更新了。

 

5. 如何理解SMO算法中“如果所有变量的解都满足此最优化问题的KKT条件,那么这个最优化问题的解就得到了,因为KKT条件是该最优化问题的充分必要条件。”??

答:我们需要一次选取两个参数做优化,比如αi和αj,此时αi可以由αj和其他参数表示出来。这样回代入W中,W就只是关于αj的函数了,这时候就可以只对αj进行优化了。在这里就是对αj进行求导,令导数为0就可以解出这个时候最优的αj了,然后也可以得到αi这就是一次的迭代过程,一次迭代只调整两个拉格朗日乘子αi和αj。SMO之所以高效就是因为在固定其他参数后,对一个参数优化过程很高效(对一个参数的优化可以通过解析求解,而不是迭代。虽然对一个参数的一次最小优化不可能保证其结果就是所优化的拉格朗日乘子的最终结果,但会使目标函数向极小值迈进一步,这样对所有的乘子做最小优化,直到所有满足KKT条件时,目标函数达到最小)。

 

6. SMO算法中是如何选择第一个变量的(即选择违反KKT条件的变量),是如何判断的?

答:首先会找违反下面这个条件的样本点,即(下面的第二条)

 

上面第一种情况对应的是自由变量即非支持向量,第二种情况对应的是支持向量,第三种情况对应的是违反不等式约束的样本。在后面的求解算法中,会应用此条件来选择优化变量。

一般来说,我们首先选择违反0 < αi* < C ==> yig(xi) = 1这个条件的点。

知乎上有一篇如何刻画违反KKT条件的文章,链接:https://zhuanlan.zhihu.com/p/27662928,但还不是很理解,望知晓的交流一下~

 

posted on 2018-08-14 16:33  王老头  阅读(191)  评论(0)    收藏  举报