关于机器学习 SVM 支持向量机 文章的小结

来源:互联网 发布:优化布林线源码 编辑:程序博客网 时间:2024/06/05 06:56

 

声明:本人为了学习收藏此文章,并在原文的基础上加了注释

强烈建议:移步原作者处==>>

http://blog.csdn.net/zouxy09

http://blog.csdn.net/zouxy09/article/details/17291543

原作者 将支持向量机分为三个部分来讲解,并再第三篇后面也附有大量的参考文献。

向无私的分享者致以崇高的敬意!!!

本系列文章,通俗易懂,是我看过的所有讲解SVM的文章中最为有趣且易懂。

看后小结:

       本文首先,引入了SVM(Support Vector Machine)的话题,介绍了SVM的一些背景知识,

并给出了友好的图形示例,进而引出了求解的欲望...

       而后,介绍了线性可分的SVM和硬间隔最大化,将SVM问题转向了凸二次规划问题,进而引出了对偶理论。

      然后,介绍了对偶优化问题,从一般数学形式的对偶问题中原问题向对偶问题的转换,过度到SVM问题中原问题向对偶问题的转换。(强烈看考andrew Ng 的讲义 note_3)。

     第四步,介绍了松弛向量与软间隔最大化,松弛向量是为了解决一些不规则的点分布,给予它们一定的容忍度,进而提高算法的鲁棒性。加入了松弛向量后,寻求的最大分类超平面,即采用软间隔最大化来得到超平面(上面讲的明显线性可分为硬间隔)。

     第五步,介绍了核函数,为了解决SVM在线性不可分的情况下,如何分类的问题,即引入核函数将线性不可分数据映射到高维空间,使其变得可分。而且采用核函数还有一个好处:可以就地对数据样本进行运算而得到结果值即样本间的距离值(其实在核函数内部已经对数据进行了从低维空间到高维空间的映射,并计算了在高维空间中样本之间的距离)。

      第六步,介绍了SVM在多类分类问题中如何应用,首先,需要声明的是原始的SVM适用于两类分类问题(因为你想呀,就一个分类面,就像一把刀一样,一刀下去只能切两份对吧!)。所以就需要将二分类的SVM转换成多分类的SVM,其中包括两种可行方案:一、一对多:假设有三个类别(A、B、C),分类器首先分出是A和非A,然后分出是B和非B,最后分出是C和非C。这样就会可到三个两类分类器(总是和类别的数目一致)。那么如果样本是(X,C),就需要检测三次,如果样本是(X,B),就需要检测两次。但这个方案存在两个问题,例如拿这个样本问了一圈,每一个分类器都说它是属于它那一类的,或者每一个分类器都说它不是它那一类的,前者叫分类重叠现象(最后随机给一个类别),后者叫不可分类现象(产生数据集偏斜问题)。二、一对一:假设有三个类别(A、B、C),一对一,顾名思义,轮流单挑嘛!!!首先A对B,两类分类器回答是A还是B?然后A对C,两类分类器回答是A还是C?最后B对C,两类分类器回答是B还是C?那么总共需要的两类分类器数目为,在这里n = 3,即需要3个两类分类器。来了一个样本后(X,A),所有分类器依次回答问题而且必须回答,第一个分类器答案是:A,第二个分类器答案是:B或C,第三个分类器答案是:A。然后统计所有分类器,看哪一个分类类别的得票最多(显然是A:2),就把样本的类别划分为那个类别(A)。OK,问题解决。这种方法显然也会有分类重叠的现象(随意给一个类别),但不会有不可分类现象,因为总不可能所有类别的票数都是0吧!其实对于分类重叠的现象还有一个解决方案就是:计算样本到各个分类超平面的距离,距离那个超平面的距离越大,就属于那个类别。(为什么是最大呢?因为是负值吗!!!)这一节好像是说多了呀!!!

        第七步:介绍了KKT条件,关于KKT条件,其实可以把KKT条件视为是拉格朗日乘子法的泛化。因为在求解有约束条件的优化问题时,拉格朗日乘子法和KKT条件是非常重要的两个求解方法。对于等式约束的优化问题,可以应用拉格朗日乘子法去求解最优值;而对于含有不等式约束,可以应用KKT条件去求解。当然,这两个方法求得的结果只是必要条件,只有当问题时凸函数的情况下,才能保证是充分必要条件。KKT条件视为是拉格朗日乘子法的泛化

通常我们需要求解的最优化问题有如下几类:

(1)、无约束优化问题: min f(x);

对于第(i)类的优化问题,常常使用的方法就是Fermat定理,即使用求取f(x)的导数,然后令其为零,可以求得候选最优值,再在这些候选值中验证;如果是凸函数,可以保证是最优解。

(2)、有等式约束的优化问题:

            Min f(x),

            X.t. H(xi) = 0;i = 1,2,...n

    对于第(ii)类的优化问题,常常使用的方法就是拉格朗日乘子法(Lagrange Multiplier) ,即把等式约束h_i(x)用一个系数与f(x)写为一个式子,称为拉格朗日函数,而系数称为拉格朗日乘子。通过拉格朗日函数对各个变量求导,令其为零,可以求得候选值集合,然后验证求得最优值。

     (3)、有不等式约束的优化问题:

            Min f(x),

            X.t. H(xi) = 0;i = 1,2,...n

                 G(xj) <= 0; j = 1,2,...m

对于第(iii)类的优化问题,常常使用的方法就是KKT条件。同样地,我们把所有的等式、不等式约束与f(x)写为一个式子,也叫拉格朗日函数,系数也称拉格朗日乘子,通过一些条件,可以求出最优值的必要条件,这个条件称为KKT条件。

具体看考一下网页如下所示:  

(http://blog.csdn.net/xianlingmao/article/details/7919597)

          第八步:SVM的实现之SMO算法,SMO(Sequential Minimal Optimization )序列最小优化算法。介绍SMO之前,先介绍了SMO的类似的简单版本算法:坐标下降(上升)算法,下降是求解最小值,上升是求解最大值。基本思想是先调节一个参数是目标函数向最小值方向移动,然后再调节另外一个参数再试目标函数向最小值方向移动。就这样来回交替调节更新,使得目标函数达到最小值。接下来,介绍了大名鼎鼎大SMO算法:SMO算法的思想和坐标下降法的思想差不多。唯一不同的是,SMO算法一次优化两个参数而不是一个。那为什么是两个?首先,看优化问题中存在的一个约束条件。假设先选择优化一个固定其他参数,但是注意了,这个要优化的参数可以有其他的固定参数推出来。那就没办法优化了呀!所以每次选择两个参数,用其中一个去替换另一个,然后就成了优化一个参数了。

整个SMO思想:

(1)选择两个拉格朗日乘子αi和αj;

(2) 固定其他拉格朗日乘子αk(k不等于i和j),只对αi和           αj优化w(α);

(3)根据优化后的αi和αj,更新截距b的值;

(1)选择αi和αj:

 

1)第一个变量αi的选择:

2)第二个变量αj的选择:

(2)优化αi和αj:

(3)计算阈值b:

(4)凸优化问题终止条件:

 

 

九、参考文献与推荐阅读

[1] JerryLead的博客,作者根据斯坦福的讲义给出了流畅和通俗的推导:SVM系列

[2]嘉士伯的SVM入门系列,讲得很好。

[3] pluskid支持向量机系列,非常好。其中关于dual问题推导非常赞。

[4] Leo ZhangSVM学习系列,博客中还包含了很多其他的机器学习算法。

[5] v_july_v支持向量机通俗导论(理解SVM的三层境界)。结构之法算法之道blog

[6] 李航的《统计学习方法》,清华大学出版社

[7] SVM学习——Sequential Minimal Optimization

[8] SVM算法实现(一)

[9] Sequential Minimal Optimization: A FastAlgorithm for Training Support Vector Machines

[10] SVM --从“原理”到实现

[11] 支持向量机入门系列

[12]SVM的各个版本及其多种语言实现代码合集

[13] Karush-Kuhn-Tucker(KKT) conditions

[14] 深入理解拉格朗日乘子法(Lagrange Multiplier) KKT条件

 

 


 

 

0 0
原创粉丝点击