SVM属于一种前馈神经网络,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势。对于两类分类问题,有训练样本{(X1,y1),(X2,y2),...,(Xn,yn)},y是分类标记,取值于+1和-1。

a和b都可以作为分类超平面,但最优超平面只有一个,最优分类平面使间隔最大化。

统一起来就是

分离边缘可表示为,要使分离边缘最大化,就要使||W0||最小化。于是我们要求解的问题数学表达形式为:

这是个带约束的最优化问题。目标函数是二次的,约束条件是一次的----二次规划。可以用Lagrange系数法解决此类优化问题。引入Lagrange函数如下

ai是Lagrange系数,非负。上式中第一项为代价函数,第二项为正,于是最小化代价函数转化为最小化Lagrange函数。分别对W和b求偏导,令导数为0。

 

 

把上面结果代回(2)式,得到Lagrange对偶问题,即原来的最小化L(W,b,a)变为最大化Q(a)

要解这个最优化问题,由KKT条件得,最优分类超平面的斜率

最优分类平面的权向量是支持向量的线性组合。这意味着其他非支持向量对分类超平面没有影响。

松驰变量

在实际问题中总会有少数几个点越过了分类平面,我们的数学模型应该对这些噪声数据有一定的容忍性。此时(1)式变为

代价函数变为

虽然加入了松驰变量,但是按照上面的推导方法,最终得出的W0和b0都上面上完全一样的!

核函数

SVM显然是线性分类器,但数据如果根本就线性不可分怎么办?不用着急,数据在原始空间(称为输入空间)线性不可分,但是映射到高维空间(称为特征空间)后很可能就线性可分了。这同时带来一个问题:在高维空间上求解一个带约束的优化问题显然比在低维空间上计算量要大得多,这就是所谓的“维数灾难”。于是就引入了“核技巧”。假如X映射到高维空间后是Φ(X),定义核函数:

K(X,Y)=<Φ(X),Φ(Y)>

<,>表示内积运算。我们看到核函数将m维高维空间的内积运算转化为n维低维输入空间的核函数计算,从而巧妙地解决了在高维特征空间中计算的“维数灾难”等问题,从而为在高维特征空间解决复杂的分类或回归问题奠定了理论基础。

常用的核函数可分为两类,即内积核函数和平移不变核函数,如:

  1. 多项式核函数 ,采用该核函数的支持向量机是一个q阶多项式分类器,参数q由用户决定。
  2. 高斯核函数,采用该核函数的支持向量机是一种径向基函数分类器
  3. Sigmoid核函数,其中tanh是双曲正切函数,,采用该核函数的支持向量机是一个单隐层感知器神经网络

使用内积核函数在特征空间建立的最优超平面定义为

 SVM学习算法的一般步骤

准备一组训练样本{(X1,d1),(X2,d2),...,(Xp,dp),...,(XP,dP)} 

如果能够选择变换函数Φ(这取决于设计者在这方面的知识),就按下面的步骤来。

  1. 使用变换函数Φ将输入向量映射到高维特征空间。
  2. 解下列最优化问题,求出Lagrange系数a0




      
       (加入了松弛变量的) 或  
  3. 计算最优权值
  4. 对于待分类的模式X,计算分类判别函数

若能够选择一个内积函数K(Xp,X),则可避免向高维空间的映射。此时算法步骤为:

  1. 解下列最优化问题,求出Lagrange系数a0



      
        或  
  2. 计算最优权值
  3. 对于待分类的模式X,计算分类判别函数

解决像(5)、(6)这样的最优化问题,一种流行的方法是SMO(Sequential Minimal Optimzation)算法。

posted on 2012-08-16 19:40  高性能golang  阅读(3229)  评论(2编辑  收藏  举报