SVM的学习,首推林智仁的网站
http://www.csie.ntu.edu.tw/~cjlin/
libsvm工具,有各种语言写的源码,像最常用的C++和Java。
里面有个A practical guide to SVM Classification文档,简单直观的介绍了SVM。
至于libsvm的使用,介绍的非常仔细的网页
http://ntu.csie.org/~piaip/svm/svm_tutorial.html
关于SVM原理,讲的比较好的有
李航的《统计学习方法》
林智仁的http://videolectures.net/mlss06tw_lin_svm/
一老外的http://videolectures.net/epsrcws08_campbell_isvm/
http://www.cnblogs.com/liqizhou/archive/2012/05/11/2495537.html
以下讲解的均是针对二分类
1. 什么是SVM
SVM是一种分类器
2. SVM的分类思想
寻找一个超平面,将两个不同类别的数据分开。
3. 怎样寻找这个超平面H
这里涉及到另外一个概念,margin.
margin: 距离超平面最近的点称之为支持向量(Support Vector),经过支持向量且和超平面H平行的两个超平面记为H1和H2,
H1和H2之间的距离就称之为margin. 寻找使margin最大的H。
问题可以转化成最优化问题:最小化
构造拉格朗日函数:
对L(w,b)分别对w和b求偏导,令偏导结果为0,将所得结果带入上式,得
有了上式,就很自然的引入核函数的概念
核函数有线性核函数,多项式核函数,RBF核函数,sigmoid核函数等待
接下来分析利用SVM进行多类分类问题
SVM本身是个二类分类器,如何实现多类分类?
假设现在要实现k类分类问题,有两种方法
(1) 利用二类SVM将k类数据分成两类,其中类1为一类,类2至类k为另一类。
继续对类2至类k数据进行二分类。持续下去,共需k-1个SVM分类器。
(2)为任意两类数据设计一个二类分类器,则需k(k-1)个二类分类器。