Source Code and Help Docs:
http://download.csdn.net/source/377387
SMO Algorithm:
http://d.download.csdn.net/down/377392/xlliu0226
SVM的分类原理
SVM
的主要思想可以概括为两点
: (1)
它是针对线性可分情况进行分析
,
对于线性不可分的情况
,
通过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分
,
从而
使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能
; (2)
它基于结构风险最小
化理论之上在特征空间中建构最优分割超平面
,
使得学习器得到全局最优化
,
并且在整个样本空间的期
望风险以某个概率满足一定上界。
支持向量机的目标就是要根据结构风险最小化原理
,
构造一个目标函数将两类模式尽可能地区分开来
,
通常分为两类情况来讨论
, (
1
)
线性可分
,(
2
)
线性不可分。
1.1 线性可分情况
在线性可分的情况下
,
就会存在一个超平面使得训练样本完全分开
,
该超平面可描述为
:
w
·
x + b =
0
(
1
)
其中
,
“·”是点积
, w
是
n
维向量
, b
为偏移量。
最优超平面是使得每一类数据与超平面距离最近的向量与超平面之间的距离最大的这样的平面
.
最优超平面可以通过解下面的二次优化问题来获得:
满足约束条件:
, i = 1 ,2 ,3 ,
......
, n. (3)
在特征数目特别大的情况
,
可以将此二次规划问题转化为其对偶问题:
(4)
(5)
(6)
满足约束条件
:
(7)
这里
是
Lagrange
乘子
,
是最优超平面的法向量
,
是最优超平面的偏移量
,
在这类
优化问题的求解与分析中
, KKT
条件将起到很重要的作用
,
在
(7)
式中
,
其解必须满足:
(8)
从式
(5)
可知
,
那些
= 0
的样本对分类没有任何作用
,
只有那些
> 0
的样本才对分类起作用
,
这些样
本称为支持向量
,
故最终的分类函数为:
(9)
根据
f ( x)
的符号来确定
X
的归属。
1. 2 线性不可分的情况
对于线性不可分的情况
,
可以把样本
X
映射到一个高维特征空间
H,
并在此空间中运用原空间的函
数来实现内积运算
,
这样将非线性问题转换成另一空间的线性问题来获得一个样本的归属
.
根据泛函的
有关理论
,
只要一种核函数满足
Mercer
条件
,
它就对应某一空间中的内积
,
因此只要在最优分类面上采
用适当的内积函数就可以实现这种线性不可分的分类问题
.
此时的目标函数为:
(10)
其相应的分类函数为: (11)
1. 3 内积核函数
高维空间的内积运算:
前述的最优线性分类函数,其最终的分类判别函数和它的求解过程中只包含内积运算(
x . xi)或(
xi . xj),可见,要解决一个特征空间中的最优线性分类问题,我们只需要知道这个空间的内积运算即可。
解决非线性问题:对输入向量(空间)进行非线性映射,使映射后能够用线性解决。
没有必要知道采用的非线性变换的形式,而只需要它的内积运算即可。
即使变换空间的维数增加很多,在其求解最优分类面的问题并没有增加多少计算复杂度。
根据Hilbert-Schmidt原理,只要一种运算满足Mercer条件,它就可以作为这里的内积运算使用:对于任意的对称函数
K(x, x’),它是某个特征空间中的内积运算的充分必要条件是,对于任意的
φ(x)!≡0且∫ φ2(x)dx < ∞,有∫∫ K(x, x’) φ(x) φ(x’) dx dx’> 0。这一条件并不难满足。
支持向量机:
将
K(x, x’)取代前述求解过程和判别函数中的内积x?
x’:
判别函数为:
f(x)=sgn{∑αi*yi K(xi , x)+b*}
常见的内积函数形式:
(1) 多项式形式的内积函数:
K(x,y)=[(x?
y)+1]q
(2) 基于径向基函数RBF内积函数形式:
K(x,y)=exp{-|x-
y|2/σ2}
(3) 高斯RBF函数:
KGaussian(x,y)=exp{-
ρ|x-
y|2}
(4) 普遍的RBF内积函数形式:
Kd-RBF(x,y)=exp{-
ρd(x,
y)}
dχ2(x,y)= ∑{(xi-
yi)2/(xi+yi)}
d L1(x,y)= ∑|xi-
yi| (Laplacian RBF)
da,b(x,y)= ∑|xia-
yia|b (非高斯的RBF)
(5) S型函数形式:
K(x,y)=tanh((x.
y)+c)
SVM的多类问题
SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器。目前,构造SVM多类分类器的方法主要有两类:一类是直接法,直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类。这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中;另一类是间接法,主要是通过组合多个二分类器来实现多分类器的构造,常见的方法有one-against-one和one-against-all两种。
a.一对多法(one-versus-rest,简称1-v-r SVMs)。训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。
b.一对一法(one-versus-one,简称1-v-1 SVMs)。其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。当对一个未知样本进行分类时,最后得 票最多的类别即为该未知样本的类别。Libsvm中的多类分类就是根据这个方法实现的。
c.层次支持向量机(H-SVMs)。层次分类法首先将所有类别分成两个子类,再将子类进一步划分成两个次级子类,如此循环,直到得到一个单独的类别为止。
对c和d两种方法的详细说明可以参考论文《支持向量机在多类分类问题中的推广》(计算机工程与应用。2004)
d.其他多类分类方法。除了以上几种方法外,还有有向无环图SVM(Directed Acyclic Graph SVMs,简称DAG-SVMs)和对类别进行二进制编码的纠错编码SVMs。