文本分类–多分类

文本分类–多分类

  文本分类算是自然语言处理领域最最常见的问题了,开源的工具也很好用,但是苦于训练速度缓慢,需要引进多核的版本,开源提供的多核支持参数有限,而同事提供的又有语言障碍,觉得自己探索下多分类器。

    分类算法有很多,但是效果较好的基本就是LR和SVM,而这两个算法业内著名的开源代码应该就是liblinear和libsvm,libsvm支不支持多核暂时还未了解,但是liblinear支持的多核版本也就三组(0、2、11),正好避开了我需要用的那组参数,于是就摸索下liblinear的train代码。

 

一、先说分类

      二分类是分类问题中最最基本的功能,这个功能LR和SVM都支持,接着说多分类问题。

     多分类可以分为两种:(1).直接多分类,(2)利用多重二分类组合

  1.1 直接多分类

    softmax就是LR版本的直接多分类形式,而SVM自己就可以直接实现多分类,在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类类。这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中。因此利用多重二分类更为常见。

 

  1.2 利用多重二分类组合

    (a)一对多法(one-versus-rest,简称OVRSVMs)。

    训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个分类器。分类时将未知样本分类为具有最大分类函数值的那类。

    假如我有四类要划分(也就是4个Label),他们是A、B、C、D。于是我在抽取训练集的时候,分别抽取A所对应的向量作为正集,B,C,D所对应的向量作为负集;B所对应的向量作为正集,A,C,D所对应的向量作为负集;C所对应的向量作为正集,A,B,D所对应的向量作为负集;D所对应的向量作为正集,A,B,C所对应的向量作为负集,这四个训练集分别进行训练,然后的得到四个训练结果文件,在测试的时候,把对应的测试向量分别利用这四个训练结果文件进行测试,最后每个测试都有一个结果f1(x),f2(x),f3(x),f4(x).于是最终的结果便是这四个值中最大的一个。

    原作者注:这种方法有种缺陷,因为训练集是1:M,这种情况下存在biased.因而不是很实用.

    我注:liblinear采用的就是这种方法,因而训练速度快,但是占用内存很大。

 

    (b)一对一法(one-versus-one,简称OVOSVMs或者pairwise)。

    其做法是在任意两类样本之间设计一个分类器,因此k个类别的样本就需要设计k(k-1)/2个二分类器。当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。    

    还是假设有四类A,B,C,D四类。在训练的时候我选择A,B;A,C; A,D; B,C;B,D;C,D所对应的向量作为训练集,然后得到六个训练结果,在测试的时候,把对应的向量分别对六个结果进行测试,然后采取投票形式,最后得到一组结果。

    投票是这样的.
      A=B=C=D=0;
      (A, B)-classifier 如果是A win,则A=A+1;otherwise,B=B+1;
      (A,C)-classifer 如果是A win,则A=A+1;otherwise, C=C+1;
      …
      (C,D)-classifer 如果是A win,则C=C+1;otherwise,D=D+1;
      The decision is the Max(A,B,C,D)

    原作者注:这种方法虽然好,但是当类别很多的时候,model的个数是n*(n-1)/2,代价还是相当大的.

    我注:libsvm采用的就是该种方法,因而准确率会比liblinear高,但是速度会慢很多。

    

    (c)层次支持向量机(H-SVMs)。

    层次分类法首先将所有类别分成两个子类,再将子类进一步划分成两个次级子类,如此循环,直到得到一个单独的类别为止。

    对c的详细说明可以参考论文《支持向量机在多类分类问题中的推广》(计算机工程与应用。2004)##没有了解,有空关注下

 

    (d)DAG-SVMS是由Platt提出的决策导向的循环图DDAG导出的,是针对“一对一”SVMS存在误分、拒分现象提出的。算法在训练阶段与“一对一”法同,也要构每两类间的分类器,既有n(n-1)/2个分类器。但在分类阶段,该方法将所有分类器构成一个两向有向环图,包括n(n-1)/2个节点和n个叶。其中每个节点为一个分类器,并与下一层的两个节点(或叶)相连。当对一个未知样本进行分类时,首先从顶部的节点(包含两类)开始,据节点的分类结果用下一层的左节点或右节点继续分类,直到达到底层某个叶为止,该叶所表示类别即为未知样本的类别。DAGSVM在训练上同OVOSVM,都需要训练n*(n-1)/2个分类器,但是在分类的时候借助有向环图的结构,可以只利用(n-1)个分类器就可以完成。而效率上有提升。

    文本分类--多分类

     但是DAG-SVMS在分类过程中存在误差积累现象,即若在某个节点处发生分类错误,则会把分类错误延续到该节点的下层节点中、分类错误在越接近根节点的位置发生,误差积累的现象就会越严重,分类的性能也会越差。

    我注:二分类真正的结合决策树了……

 

 

 

 

参考文献:

      1.http://blog.sina.com.cn/s/blog_4c98b96001009b8d.html

  2.http://www.doc88.com/p-6092154562202.html

转载于:https://www.cnblogs.com/zidiancao/p/5046508.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109210.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • android 主流分辨率是多少,android手机常用分辨率有哪些?

    android 主流分辨率是多少,android手机常用分辨率有哪些?QVGA(240×320)用于1000元以下的低端Android手机,显示效果和塞班S60V3的手机一样,对软件的兼容性不好,很多应用运行起来可能会无故退出,代表机型有中兴N600、HTCG8Wildfire等。HVGA(320×480)曾经的主流分辨率,现在售价在1500到2000元手机常用,运行绝大部分软件没有问题,但显示效果一般,代表机型有HTCG1、G2、G3、LGP500等。WV…

    2022年8月13日
  • c# Response.ContentType类型汇总

    c# Response.ContentType类型汇总 application/activemessageapplication/andrew-insetapplication/applefileapplication/atomicmailapplication/dca-rftapplication/dec-dxapplication/mac-binhex40hqxapplication/mac-compactprocptapplication/

    2022年7月19日
  • Java静态全局变量与全局变量的区别[通俗易懂]

    Java静态全局变量与全局变量的区别[通俗易懂]Static全局变量与普通的全局变量有什么区别?答:  全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个原文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量…

    2022年10月23日
  • [M枚举] lc5. 最长回文子串(枚举+中心拓展+区间dp)「建议收藏」

    [M枚举] lc5. 最长回文子串(枚举+中心拓展+区间dp)「建议收藏」文章目录1.题目来源2.题目解析方法一:枚举1.题目来源链接:lc5.最长回文子串2.题目解析方法一:枚举回文串一共有两种,即长度为奇数的回文串,长度为偶数的回文串。我们可以枚举回文串的中心(偶数长度回文串假想一个中心就行了),然后分别拿两个指针l=i-1,r=i+1向左右两边同时拓展,若s[l]=s[r]则,l–,r++。一直进行该操作,直到不等或一方到达边界位置。我们针对每一个枚举位置i,都考虑其两种情况,即偶数,奇数都考虑一遍,取个最大的就行了。

    2022年7月24日
  • 有趣的python代码_python五角星代码

    有趣的python代码_python五角星代码原标题:使用Python代码的程序员也浪漫代码也浪漫:用Python放一场圣诞节烟花秀!天天敲代码的朋友,有没有想过代码也可以变得很酷炫又浪漫?今天就教大家用Python模拟出绽放的烟花庆祝昨晚法国队夺冠,工作之余也可以随时让程序为自己放一场烟花秀。这个有趣的小项目并不复杂,只需一点可视化技巧,100余行Python代码和程序库Tkinter,最后我们就能达到下面这个效果:学完本教程后,你也能做…

    2022年9月24日
  • 测试管理工具列表大全「建议收藏」

    测试管理工具列表大全「建议收藏」测试管理工具列表大全IDNameNotes1TestDirector/QualityCenter业界第一个基于Web的测试管理系统,它可以在您公司组织内进行全球范围内测试的协调。通过在一个整体的应

    2022年8月3日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号