出处:http://www.matlabsky.com/thread-10317-1-1.html
线性分类器(
一定意义上,
也可以叫做感知机)
是最简单也很有效的分类器形式.
在一个线性分类器中,
可以看到SVM
形成的思路,
并接触很多SVM
的核心概念.
用一个二维空间里仅有两类样本的分类问题来举个小例子。如图所示
C1
和C2
是要区分的两个类别,在二维平面中它们的样本如上图所示。中间的直线就是一个分类函数,它可以将两类样本完全分开。一般的,如果一个线性函数能够将样本完全正确的分开,就称这些数据是线性可分的,否则称为非线性可分的。
什么叫线性函数呢?在一维空间里就是一个点,在二维空间里就是一条直线,三维空间里就是一个平面,可以如此想象下去,如果不关注空间的维数,这种线性函数还有一个统一的名称——
超平面(Hyper Plane
)!
实际上,一个线性函数是一个实值函数(即函数的值是连续的实数),而我们的分类问题(例如这里的二元分类问题——
回答一个样本属于还是不属于一个类别的问题)需要离散的输出值,例如用1
表示某个样本属于类别C1
,而用0
表示不属于(不属于C1
也就意味着属于C2
),这时候只需要简单的在实值函数的基础上附加一个阈值即可,通过分类函数执行时得到的值大于还是小于这个阈值来确定类别归属。
例如我们有一个线性函数
例如我们有一个线性函数
g(x)=wx+b
我们可以取阈值为0
,这样当有一个样本xi
需要判别的时候,我们就看g(xi)
的值。若g(xi)>0
,就判别为类别C1
,若g(xi)<0
,则判别为类别C2
(等于的时候我们就拒绝判断,呵呵)。此时也等价于给函数g(x)
附加一个符号函数sgn()
,即f(x)=sgn [g(x)]
是我们真正的判别函数。
关于g(x)=wx+b
这个表达式要注意三点:一,式中的x
不是二维坐标系中的横轴,而是样本的向量表示,例如一个样本点的坐标是(3,8)
,则xT=(3,8)
,而不是x=3
(一般说向量都是说列向量,因此以行向量形式来表示时,就加上转置)。二,这个形式并不局限于二维的情况,在n
维空间中仍然可以使用这个表达式,只是式中的w
成为了n
维向量(在二维的这个例子中,w
是二维向量,注意这里的w
严格的说也应该是转置的形式,为了表示起来方便简洁,以下均不区别列向量和它的转置,聪明的读者一看便知);三,g(x)
不是中间那条直线的表达式,中间那条直线的表达式是g(x)=0
,即wx+b=0
,我们也把这个函数叫做分类面。
实际上很容易看出来,中间那条分界线并不是唯一的,我们把它稍微旋转一下,只要不把两类数据分错,仍然可以达到上面说的效果,稍微平移一下,也可以。此时就牵涉到一个问题,对同一个问题存在多个分类函数的时候,哪一个函数更好呢?显然必须要先找一个指标来量化“
好”
的程度,通常使用的都是叫做“
分类间隔”
的指标。下一节我们就仔细说说分类间隔,也补一补相关的数学知识。
==========
SVM
入门(三)线性分类器
Part 2===================
上回说到对于文本分类这样的不适定问题(有一个以上解的问题称为不适定问题),需要有一个指标来衡量解决方案(即我们通过训练建立的分类模型)的好坏,而分类间隔是一个比较好的指标。
在进行文本分类的时候,我们可以让计算机这样来看待我们提供给它的训练样本,每一个样本由一个向量(就是那些文本特征所组成的向量)和一个标记(标示出这个样本属于哪个类别)组成。如下:
Di=(xi,yi)
xi 就是文本向量(维数很高),yi 就是分类标记。
在二元的线性分类中,这个表示分类的标记只有两个值,1
和-1
(用来表示属于还是不属于这个类)。有了这种表示法,我们就可以定义一个样本点到某个超平面的间隔:
δi=yi(wxi+b)
这个公式乍一看没什么神秘的,也说不出什么道理,只是个定义而已,但我们做做变换,就能看出一些有意思的东西。
首先注意到如果某个样本属于该类别的话,那么wxi+b>0
(记得么?这是因为我们所选的g(x)=wx+b
就通过大于0
还是小于0
来判断分类),而yi
也大于0
;若不属于该类别的话,那么wxi+b<0
,而yi
也小于0
,这意味着yi(wxi+b)
总是大于0
的,而且它的值就等于|wxi+b|
!(也就是|g(xi)|
)
现在把w
和b
进行一下归一化,即用w/||w||
和b/||w||
分别代替原来的w
和b
,那么间隔就可以写成
这个公式是不是看上去有点眼熟?没错,这不就是解析几何中点xi
到直线g(x)=0
的距离公式嘛!(推广一下,是到超平面g(x)=0
的距离, g(x)=0
就是上节中提到的分类超平面)
小Tips
:||w||
是什么符号?||w||
叫做向量w
的范数,范数是对向量长度的一种度量。我们常说的向量长度其实指的是它的2-
范数,范数最一般的表示形式为p-
范数,可以写成如下表达式
向量w=(w1, w2, w3,…… wn)
它的p-
范数为
看看把p
换成2
的时候,不就是传统的向量长度么?当我们不指明p
的时候,就像||w||
这样使用时,就意味着我们不关心p
的值,用几范数都可以;或者上文已经提到了p
的值,为了叙述方便不再重复指明。
当用归一化的w
和b
代替原值之后的间隔有一个专门的名称,叫做几何间隔,几何间隔所表示的正是点到超平面的欧氏距离,我们下面就简称几何间隔为“
距离”
。以上是单个点到某个超平面的距离(就是间隔,后面不再区别这两个词)定义,同样可以定义一个点的集合(就是一组样本)到某个超平面的距离为此集合中离超平面最近的点的距离。下面这张图更加直观的展示出了几何间隔的现实含义:
H
是分类面,而
H1
和
H2
是平行于
H
,且过离
H
最近的两类样本的直线,
H1
与
H
,
H2
与
H
之间的距离就是几何间隔。
之所以如此关心几何间隔这个东西,是因为几何间隔与样本的误分次数间存在关系:
其中的
δ
是样本集合到分类面的间隔,
R=max ||xi||
i=1,...,n ,即 R 是所有样本中( xi 是以向量表示的第 i 个样本)向量长度最长的值(也就是说代表样本的分布有多么广)。先不必追究误分次数的具体定义和推导过程,只要记得这个误分次数一定程度上代表分类器的误差。而从上式可以看出,误分次数的上界由几何间隔决定!(当然,是样本已知的时候)
i=1,...,n ,即 R 是所有样本中( xi 是以向量表示的第 i 个样本)向量长度最长的值(也就是说代表样本的分布有多么广)。先不必追究误分次数的具体定义和推导过程,只要记得这个误分次数一定程度上代表分类器的误差。而从上式可以看出,误分次数的上界由几何间隔决定!(当然,是样本已知的时候)
至此我们就明白为何要选择几何间隔来作为评价一个解优劣的指标了,原来几何间隔越大的解,它的误差上界越小。因此最大化几何间隔成了我们训练阶段的目标,而且,与二把刀作者所写的不同,最大化分类间隔并不是
SVM
的专利,而是早在线性分类时期就已有的思想。