高性能文本分类算法:DragPushing
文本分类算法可以大致总结如下:
高精度算法:SVM、Boosting。这类算法的分类精度很高,但训练与分类时间很长,往往难以满足大规模问题的需要;
高速度算法:Centroid、Rocchio、Winnow等。这类算法的训练与分类时间与问题的规模成线性关系,但分类精度往往不太理想。
DragPushing策略的目标是得到一种既好又快的文本分类算法:精度可以与SVM相当;而运行时间与Centroid保持相当。其基本思想是:对被错误分类的训练样本,拉近与正确类代表之间的距离;推远与错误类代表之间的距离。类代表,可以是中心向量、类中样本及概率中心(即类中属性的概率)。示意图如下:
对于样本d,其正确分类应是A。但是使用分类规则时,却将d划分为B类(相似性度量上是Sim(Aoriginal,d) < Sim(Boriginal,d),用距离表示则是d离A远,离B近)。此时,将对A类代表进行Drag操作,对B类代表进行Push操作,实现样本d偏离B类代表靠近A类代表的效果。一次迭代过程中,对于所有错分类的样本,都执行相应的Drag/Push操作,多次迭代后的即可达到一个很好的效果。
将DragPushing策略应用到Centroid算法中,过程如下:对于一个文档(document),其中每一个出现的词权重采用tf-idf计算方式,并进行归一化处理
其中D是所有文档的数目,nt是所有包含单词t的文档数目。tf表示词t在当前文档中出现的次数。得到文档的特征向量后,对于每一个类别Ci,计算其summed centroid和normalized centroid
其中||z||2表示2范数(2-norm of z)。对于给定的一个测试文档d,其与类别C之间的相似性可以使用内积的计算形式度量
文档d的最终类别可以通过如下方式判定
在一次迭代过程中,若A类文档d被错分类为B类,则执行下面的DragPushing操作:
其中o表示的是迭代次数,l 表示特征空间中的特征下标。dragweight/pushweight则是调节Drag/Push程度的参数。[z]+等同于max{0,z}(这一操作的原因是采用非负的值实验效果更好)。
整体的算法框架如下:
DragPushing策略还可以融入到朴素贝叶斯分类和K近邻分类算法中,此处不再赘述。
拉推策略的基本思想是利用训练集误差去修正分类器模型。换句话说,拉推策略主要考虑降低训练集误差,也就是经验误差。但是,即使是很低的训练集误差也不一定就能保证分类器的测试集误差,又称推广误差。这是推拉策略的不足之处。
参考文献: A Novel Refinement Approach for Text Categorization, Songbo Tan, Xueqi Cheng, Moustafa M. Ghanem, Bin Wang, Hongbo Xu