libsvm最新源代码(版本3.21)理解解析(一)

一、导读

        SVM的理论通过吴恩达(Andrew NG)的机器学习斯坦福公开课(http://open.163.com/special/opencourse/machinelearning.html)以及一些博文都可以很好的理解了,但理解归理解,如何实现却是另一回事。LIBSVM(http://www.csie.ntu.edu.tw/~cjlin/libsvm/)是一款是应用最为广泛的SVM库之一,它集合了C-SVC,V-SVC以及多分类等各种SVM的变形库。最为重要的是,LIBSVM是一个开源库,开发者和学习者都可以自由下载进行源代码的学习。经过一个月的学习,本人对LIBSVM的源代码稍微研究了一下,特此记录一下自己的理解。当然,现在的理解还不够透彻,以后还会不断补充加强并进行记录。

       当大家对SVM的解决过程理解了之后查看LIBSVM源代码之后却发现有很大的不同,这是因为,林智仁等人并不是根据吴恩达等人所讲解的原版算法进行编写的,而是采用的改进版本,比如SMO的改进版、更新算子的启发式选法,都与网上流传的不太一致,因此,想要弄明白源代码的完全内容需要花费大量时间阅读论文和资料,直到现在,本人仍然存在着大量不理解的地方,本文只是对整个算法框架进行一个大致的理解记录。

       本文撰写的基础是参照林智仁以及学生关于LIBSVM所写的指导论文进行理解而来。具体的论文名如下:

       (1)LIBSVM: A Library for Support Vector Machines

         http://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.pdf

       (2)Working Set Selection Using Second Order Information for Training Support Vector Machines

         http://www.csie.ntu.edu.tw/~cjlin/papers/quadworkset.pdf

二、SVM基本概念

       SVM的详细原理问题就不介绍了,很多公开课和博文都有介绍,这里强调一下SVM的目标公式。SVM的基本形式是解决二分类问题,它的目的是寻找一个最大间隔超平面,使其能最佳分离两类的内容。SVM寻找超平面的公式为:


       其中是超平面,C为惩罚因子,松弛变量,i为样本编号,x向量是样本的特征向量,y是其所对应的分类值(标签值),取+1或-1,样本数量为l。经过对偶变换以及KKT等转换,由(1)式可得:


       其中α为拉格朗日乘子向量,Q是一个l X l的矩阵,是所选取的核函数,是数值全为1的行向量。可能有的同学对该式有点陌生,该公式实际上就是:


          max变成min,减号前后换一下位置即可,其它的也都是经过转换可得,拿支笔在草稿纸上稍微写写就能得到(2)式,至于为什么要采用(2)式而不采用上式,这是因为LIBSVM的论文中以及算法中使用了(

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值