理解Support Vector Machine
小弟最近在研究SVM方面的理论,写这篇文章来总结一下我的理解。
首先吐个槽,外国人有个毛病,稍微整个什么新的东西出来就要起个矫情的名字,让人觉得很高深。也许是我修行不够,不能理解其深奥的含义,但是好歹也得起个好理解的名字吧,直译过来”支持向量机“,这到底什么玩意儿?其实所谓”支持向量“,就是由影响决策平面(classifier)的点和原点形成而已,稍后再叙。
1、初窥SVM.
SVM可以理解为一个比较robust的分类器,简单的SVM可以把线性可分的点集分成两个部分。
2、简单的SVM
为简单起见,以二维平面中线性可分点集{ xi,yi}, i=1,...,n, y∈{-1,+1}为例,要寻找出一条直线,使其到两类点的最短距离的和最大。这个最短距离的和可以称之为margin。SVM就是要找这个直线,并且最大化margin。
上面一段提到,SVM是一个比较robust的分类器。原因就在于SVM使得margin最大化,保证在距离某一类点集一段距离内,都可以被判断为属于该点集,这样可以降低小扰动带来的影响,提高正确率。
在多维情况下,该直线变为超平面(hyperplane)。
2.1、超平面(/直线)条件的确定
超平面的确定于直线相类似,w·x + b=0,其中 |b|/||w||为超平面到原点的垂直距离。只不过,这里斜率部分和自变量部分为向量表示。其算法主要是在于确定斜率向量和b中元素,以求margin最大(算法的核心就是线性规划,如果转化得当,可以用现有的linear programming solver)。
考虑用于训练的二维二元可分点集,可以得到如下约