Java 多标签文档分类

Java 多标签文档分类,java,machine-learning,text-mining,document-classification,Java,Machine Learning,Text Mining,Document Classification,我有一个数据库,其中存储的数据基于以下三个字段:id、text、{labels}。请注意,每个文本已分配给多个label\tag\class。我想构建一个模型(weka\rapidminer\mahout),该模型能够为给定文本推荐\分类一组标签\标签\类 我听说过SVM和朴素贝叶斯分类器,但不确定它们是否支持多标签分类。任何指引我走向正确方向的东西都是非常受欢迎的 SVM本质上是一种二元分类器,但有许多替代方案允许它应用于多标签环境,基本上是通过组合SVM的多个二元实例 Wikipedia文章

我有一个数据库,其中存储的数据基于以下三个字段:id、text、{labels}。请注意,每个文本已分配给多个label\tag\class。我想构建一个模型(weka\rapidminer\mahout),该模型能够为给定文本推荐\分类一组标签\标签\类


我听说过SVM和朴素贝叶斯分类器,但不确定它们是否支持多标签分类。任何指引我走向正确方向的东西都是非常受欢迎的

SVM本质上是一种二元分类器,但有许多替代方案允许它应用于多标签环境,基本上是通过组合SVM的多个二元实例

Wikipedia文章中的多类部分提供了一些示例。我不确定您是否对细节感兴趣,但它们包含在Weka和Rapidminer中。例如,分类器是将SVM应用于多标签问题的变体之一


朴素贝叶斯可以直接应用于多标签环境。

基本的多标签分类方法是一对一(OvR),也称为二元相关性(BR)。基本思想是,使用现成的二进制分类器,如朴素贝叶斯或支持向量机,然后创建K个实例来解决K个独立的分类问题。在类似Python的伪代码中:

for each class k:
    learner = SVM(settings)  # for example
    labels = [class_of(x) == k for x in samples]
    learner.learn(samples, labels)
然后在预测时,您只需在样本上运行每个二进制分类器,并收集它们预测为正的标签


(显然,训练和预测都可以并行进行,因为假设问题是独立的。请参阅两个进行多标签分类的Java包的链接。)

可以向您推荐一些工具,这些工具是对weka进行多标签分类的扩展 分类

  • MEKA:WEKA的多标签扩展
  • Mulan:一个用于多标签学习的Java库
  • 还有一个SVM库扩展。如果您对python软件包感到满意,scikit learning还提供了一个


    此外,ICML 2013“具有多个标签的高效多标签分类”中最近的这篇文章应该可以帮助您实现。如果您想自己实现一个。

    我认为您混淆了多类和多标签分类。在前者中,每个样本有一个类,但有两个以上的可能性;在后者中,每个样本可以同时属于多个类。该场景中的属性应该是什么?“我确实有一些想法,但我想听听比我更有经验的人的建议。”拉斯曼斯说。我要问的是多标签分类,即每个样本可以同时属于多个类。@larsmans是NB、kNN的常用方法之一,在某些情况下(当您输出分数而不是{1,1}决策时),SVM将获得每对文档类的分数。使用这种方法,您不需要为NB和kNN生成N个二进制分类器。在所有情况下,他们使用列车组学习,并通过交叉验证和/或使用验证集优化阈值,其中质量指标(如F1)得到优化。完成后,对于每个测试文档,分类器会为每个类生成一个分数,如果该值高于阈值,则会对其进行分类。一些引用(由于缺少空间,我以前无法粘贴它们)。关于最著名的文本分类集合之一(RCV1)。他解释了如何在多标签环境中使用SVM的阈值。[Yang_2001]()关于文本分类中阈值策略的研究。除了一系列独立的问题之外,还有很大的空间。例如,使用概率分类器(比如逻辑回归),您可以定义结果标签集上的分布,例如主题模型或MRF,并进行全局优化。我相信你也可以使用普拉特的方法,或者一些直接的全局判别标准,将类似的想法融入到支持向量机中。@BenAllison:当然,但我只是指出了基线方法和一系列做更高级工作的工具包。