SVM(Support Vector Machine),中文名为 支持向量机,就像自动机一样,听起来异常神气,最初总是纠结于不是机器怎么能叫“机”,后来才知道其实此处的“机”实际上是算法的意思。
支持向量机一般用于分类,基本上,在我的理解范围内,所有的机器学习问题都是分类问题。而据说,SVM是效果最好而成本最低的分类算法。
SVM是从线性可分的情况下最优分类面发展而来的,其基本思想可以用下图表示:
(最优分类面示意图)
图中空心点和实心点代表两类数据样本,H为分类线,H1、H2分别为过各类中离分类线最近的数据样本且平行与分类线的直线,他们之间的距离叫做分类间隔(margin)。最优分类线,就是要求分类线不但能将两类正确的分开,使训练错误率为0,而且还要使分类间隔最大。推广到高维空间,最优分类线就叫做最优分类面了。
设为两类线性可分的样本集合。对应的线性判别函数的一般形式为,对应的分类方程为。将判别函数进行归一化,使所有样本都满足,此时离分类面最近的样本,要求分类面对所有样本都能正确分类,即满足 (记为A),
此时分类间隔等于,间隔最大等价于最小。最优分类线H就是满足式A且使最小的分类面。
两类数据样本中立分类面最近的样本,且平行于分类面H的超平面、上的数据就是式A中使等号成立的那些数据样本,这些数据样本叫做支持向量(support vector,SV)。
由上可知,最优分类面问题可以表示为约束优化问题,在式A的约束下,求如下函数的最小值
为此,定义如下Lagrange函数
(记为式B)
式中,为拉格朗日函数的乘子(Lagrange Multiplier) ,,要求式B的最小值,对各个参数求偏导数,且偏导数为0,结果如下
根据A式和B式的约束条件,可以将上述分类面的求解问题问题转化为如下凸优化的问题
式中,对应的为拉格朗日乘子 ,这是一个二次寻优问题,存在唯一解。若为最优解,则有
式中,为不为0的样本,即为支持向量。因此,最优分类面的权系数向量是支持向量的线性组合。
设为分类阀值,可由约束条件求解,解上述问题后得到的最优分类面函数为
若,x就属于该类,否则不属于。
概括地说,SVM就是首先通过用内积函数定义的非线性变换将输入控件变换到一个高维空间,然后在这个空间中求广义的最优分类面。
原文地址:http://blog.csdn.net/laozhaokun/article/details/25562165