【问题标题】:Improving classification results with Weka J48 and Naive Bayes Multinomial classifiers使用 Weka J48 和朴素贝叶斯多项式分类器改进分类结果
【发布时间】:2012-08-17 06:05:56
【问题描述】:

我一直在使用 Weka 的 J48 和朴素贝叶斯多项式 (NBM) 分类器 RSS 提要中的关键字频率以将提要分类为目标 类别。

例如,我的一个 .arff 文件包含以下数据提取:

@attribute Keyword_1_nasa_Frequency numeric
@attribute Keyword_2_fish_Frequency numeric
@attribute Keyword_3_kill_Frequency numeric
@attribute Keyword_4_show_Frequency numeric
…
@attribute RSSFeedCategoryDescription {BFE,FCL,F,M, NCA, SNT,S}

@data
0,0,0,34,0,0,0,0,0,40,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,BFE
0,0,0,12,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,BFE
0,0,0,10,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,BFE
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,BFE
…
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,FCL
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,F
…
20,0,64,19,0,162,0,0,36,72,179,24,24,47,24,40,0,48,0,0,0,97,24,0,48,205,143,62,7
8,0,0,216,0,36,24,24,0,0,24,0,0,0,0,140,24,0,0,0,0,72,176,0,0,144,48,0,38,0,284,
221,72,0,72,0,SNT
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,SNT
0,0,0,0,0,0,11,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,S

依此类推:总共有 570 行,每行包含 一天内某个关键字在 Feed 中出现的频率。在这种情况下,有 57 个供稿 10 天,总共有 570 条要分类的记录。每个关键字都有前缀 带有代理编号并以“频率”为后缀。

我正在对 J48s 和 NBM 分类器使用 10 倍 x 验证 “黑匣子”的基础。使用的其他参数也是默认值,即 0.25 置信度 J48 的最小对象数为 2。

到目前为止,我对不同天数、日期的实例的分类率 J28 和 NBM 结果的范围和实际关键字频率为 在 50 - 60% 范围内保持一致。但是,如果可能的话,我想改进它。

我降低了决策树的置信度,有时低至 0.1,但 改进非常有限。

任何人都可以提出任何其他改进我的结果的方法吗?

为了提供更多信息,这里的基本过程涉及各种 RSS 提要集合,其中每个提要属于一个类别。

对于给定的日期范围,例如2011 年 9 月 1 日至 10 日,每个提要的项目元素的文本被合并。然后验证文本以删除带有数字、重音符号等的单词和停用词(使用来自 MySQL 的 500 个停用词列表)。然后在 Lucene 中对剩余的文本进行索引,以计算出最流行的 64 个单词。

然后在给定日期范围内的每一天的提要的描述元素中搜索这 64 个单词中的每一个。作为其中的一部分,描述文本也以与标题文本相同的方式进行验证,并再次被 Lucene 索引。因此,标题中的流行关键字(例如“declines”)被归结为“declin”:那么如果在描述元素中发现任何类似的词也源自“declin”,例如“declined”,则“declin”的频率取自 Lucene 对描述元素中的单词的索引。

.arff 文件中显示的频率在此基础上匹配,即在上面的第一行中,“nasa”、“fish”、“kill”在 BFE 类别中特定提要的描述项中找不到那天,但 'show' 被找到了 34 次。每行代表一天中所有 64 个关键字在提要的描述项中出现的次数。

所以我认为低频不是由词干引起的。相反,我认为这是某些关键字在某一类别的提要中流行但根本没有出现在其他提要中的必然结果。因此,结果中显示了备用性。通用关键字在这里也可能是相关的。

其他可能性是每个类别的提要数量不同,其中 NCA 等类别中的提要多于 S,或者关键字选择过程本身有问题。

【问题讨论】:

    标签: weka bayesian decision-tree


    【解决方案1】:

    尝试完全关闭词干。 Stanford Intro to IR 作者provide a rough justification 说明了为什么词干会在文本分类上下文中造成伤害,并且至少没有帮助。

    我已经在自定义多项式朴素贝叶斯文本分类工具上测试了自己的词干提取(我得到了 85% 的准确率)。我尝试了 org.apache.lucene.analysis.en 版本 4.4.0 提供的 3 个 Lucene 词干分析器,它们是 EnglishMinimalStemFilter、KStemFilter 和 PorterStemFilter,加上没有词干提取,并且我对小型和大型培训文档语料库进行了测试。 Stemming 在训练语料较小时会显着降低分类准确率,而对于较大的语料库则保持准确率不变,这与 Intro to IR 语句一致。

    还有一些事情要尝试:

    • 为什么只有 64 个字?我会把这个数字增加很多,但最好你根本没有限制。
    • 试试tf-idf (term frequency, inverse document frequency)。您现在使用的只是 tf.如果将其乘以 idf,则可以缓解由“show”等常见且无信息的词引起的问题。鉴于您使用的热门词很少,这一点尤其重要。
    • 增加训练语料库的大小。
    • 尝试组合成二元组、三元组等,以及不同N-grams 的组合(您现在只使用一元组)。

    还有很多其他的旋钮可以转动,但我会从这些开始。你应该能够做得比 60% 好很多。 80% 到 90% 或更高是常见的。

    【讨论】:

      【解决方案2】:

      你没有提到任何关于stemming 的事情。在我看来,如果您执行词干提取并且 WEKA 评估基于 关键字词干,您可以获得更好的结果。

      例如,假设您的 WEKA 模型是在给定关键字 surfing 的情况下构建的,并且新的 rss 提要包含单词 surf。这两个词之间应该有一个匹配。

      有许多免费的可用词干分析器适用于多种语言。

      对于英语,一些可用的词干提取选项是:

      如果您想使用 WordNet 的字典执行词干提取,可以使用与 WordNet 集成的库和框架。

      您可以在下面找到其中的一些:

      • MIT Java WordNet 接口 (JWI)
      • Rita
      • Java WorNet 库 (JWNL)

      编辑在提供更多信息后

      我认为指定案例中的关键点是“最流行的64个词”的选择。选择的单词或短语应该是关键字或关键短语。所以这里的挑战是关键字或关键短语的提取。

      有几本关于关键字/关键短语提取的书籍、论文和算法。怀卡托大学用 JAVA 实现了一个著名的算法,叫做Keyword Extraction Algorithm (KEA)。 KEA 从文本文档中提取关键短语,既可用于免费索引,也可用于使用受控词汇表进行索引。该实现是根据 GNU 通用公共许可证分发的。

      另一个应该考虑的问题是(词性)POS 标记。 名词比其他词性标签包含更多信息。因此,如果您检查词性标签并且选择的64个单词大部分是名词,可能会得到更好的结果。

      此外,根据 Anette Hulth 发表的论文 Improved Automatic Keyword Extraction Given More Linguistic Knowledge,她的实验表明关键字/关键短语大多具有或包含在以下五种模式之一中:

      • 形容词名词(单数或质量)
      • 名词名词(无论是唱还是弥撒)
      • 形容词名词(复数)
      • 名词(sing. or mass)名词(pl.)
      • 名词(唱或弥撒)

      总之,我认为可以改善您的结果的一个简单操作是找到每个单词的 POS 标签,并选择主要是名词来评估新的 RSS 提要。您可以使用 WordNet 来查找每个单词的 POS 标签,正如我上面提到的,网络上有许多库可以与 WordNet 的字典进行集成。当然,词干提取对于分类过程也是必不可少的,并且必须加以维护。

      我希望这会有所帮助。

      【讨论】:

      • 谢谢,但不幸的是,关键字在分类之前就被 Lucene 的 Porter 实现阻止了。
      • 您能否提供整个过程的高级描述?它将帮助我们更好地了解您的系统是如何工作的。关键字是使用 Lucene 的词干分析器提取的,但之后会发生什么?新的 RSS 提要是否使用词干分类?谢谢
      • 我已经添加了对该过程的详细描述以及我自己关于为什么频率低的一些想法。也许我现在看不到“以木换树”。
      • 好的,我明白了。我很快就会用我的想法更新帖子。
      • 我对流程的定义做了一点改动,提到了使用 Lucene 索引描述项。
      猜你喜欢
      • 2012-02-11
      • 2020-04-22
      • 2017-01-10
      • 2017-09-14
      • 2019-05-04
      • 2016-07-19
      • 2018-07-17
      • 2018-02-06
      相关资源
      最近更新 更多