本周的任务是svm算法的学习以及做出一个简单的demo。
首先是我这一周的svm学习笔记
一、线性分类器
在进行文本分类的时候,我们可以让计算机这样来看待我们提供给它的训练样本,每一个样本由一个向量(就是那些文本特征所组成的向量)和一个标记(标示出这个样本属于哪个类别)组成。如下:
Di=(xi,yi)
xi就是文本向量(维数很高),yi就是分类标记。
在二元的线性分类中,这个表示分类的标记只有两个值,1和-1(用来表示属于还是不属于这个类)。有了这种表示法,我们就可以定义一个样本点到某个超平面的间隔:
δi=yi(wxi+b)
首先注意到如果某个样本属于该类别的话,那么wxi+b>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的距离公式(||w||叫做向量w的范数,范数是对向量长度的一种度量。我们常说的向量长度其实指的是它的2-范数,范数最一般的表示形式为p-范数,可以写成如下表达式
向量w=(w1, w2, w3,…… wn)
它的p-范数为
当用归一化的w和b代替原值之后的间隔有一个专门的名称,叫做几何间隔,几何间隔所表示的正是点到超平面的欧氏距离。以上是单个点到某个超平面的距离(就是间隔,后面不再区别这两个词)定义,同样可以定义一个点的集合(就是一组样本)到某个超平面的距离为此集合中离超平面最近的点的距离。下面这张图更加直观的展示出了几何间隔的现实含义:
H是分类面,而H1和H2是平行于H,且过离H最近的两类样本的直线,H1与H,H2与H之间的距离就是几何间隔。
之所以如此关心几何间隔这个东西,是因为几何间隔与样本的误分次数间存在关系:
其中的δ是样本集合到分类面的间隔,R=max ||xi||
i=1,...,n,即R是所有样本中(xi是以向量表示的第i个样本)向量长度最长的值(也就是说代表样本的分布有多么广)。先不必追究误分次数的具体定义和推导过程,只要记得这个误分次数一定程度上代表分类器的误差。而从上式可以看出,误分次数的上界由几何间隔决定!
二、针对以上研究(部分笔记),我首先选用线性核进行demo的编写与尝试。由于在文献中读到,SVM做文本分类,一般用线性核就够了。因为文本的one-hot表示是一个高维,稀疏的矩阵,线性核已经足以在这个空间里分开不同的样本。而线性核的参数也比较简单,所以我打算首先使用线性核做一个尝试。
代码如下:
第一次尝试,结果不尽人如意,只有百分之六十多
优化1:看到网上说尝试改变验证方式,采用k折交叉验证法偶尔会有更好的结果,我就尝试了一下:
但是结果并没有特别大的起色,还在六十多
很难过,下周可能会尝试换一个核函数试试
网友评论