使用Weka J48和Naive Bayes Multinomial分类器改进分类结果

时间:2012-08-21 20:31:11

标签: weka bayesian decision-tree

我一直在使用Weka的J48和Naive Bayes Multinomial(NBM)分类器 RSS Feed中关键字的频率,用于将Feed分类为目标 类别。

例如,我的一个.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条记录。每个关键字都带有前缀 带有代理号,后缀为“频率”。

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

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

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

有人可以建议任何其他方法来改善我的结果吗?

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

对于给定的日期范围,例如2011年9月1日至10日,每个Feed项目元素的文本被组合在一起。然后验证文本以删除带有数字,重音符号等的单词,并停用单词(使用来自MySQL的500个单词的列表)。剩下的文本然后在Lucene中编入索引,以找出最受欢迎的64个单词。

然后在给定日期范围内的每一天的馈送的描述元素中搜索这64个单词中的每一个。作为其中的一部分,描述文本也以与标题文本相同的方式验证,并再次由Lucene索引。因此,标题中一个流行的关键词如'拒绝'被定义为'declin':那么如果在描述元素中发现任何类似的单词也会导致'declin',例如'declin',那么'declin'的频率取自Lucene对描述元素中单词的索引。

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

所以我认为低频不是因为干扰。相反,我认为这是某些关键字在一个类别的Feed中流行的必然结果,但根本不会出现在其他Feed中。因此,结果中显示了备用。通用关键字在这里也可能是相关的。

其他可能性是每个类别的Feed数量的差异,其中更多的Feed属于NCA类别而不是S,或者关键字选择过程本身存在错误。

2 个答案:

答案 0 :(得分:1)

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

例如,假设您的WEKA模型是在给定关键字冲浪的情况下构建的,而新的RSS源包含单词 surf 。这两个词之间应该匹配。

有许多免费提供多种语言的词干分析器。

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

如果您想使用WordNet的字典执行词干,那么有库和库。与WordNet集成的框架。

下面你可以找到其中一些:

  • MIT Java WordNet界面(JWI
  • Rita
  • Java WorNet库(JWNL
提供更多信息后

已编辑

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

有几本关于关键字/关键字提取的书籍,论文和算法。怀卡托大学在JAVA中实施了一种名为Keyword Extraction Algorithm (KEA)的着名算法。 KEA从文本文档中提取关键短语,可用于免费索引或使用受控词汇表进行索引。实施在GNU通用公共许可证下发布。

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

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

  • ADJECTIVE NOUN(单数或质量)
  • NOUN NOUN(无论是唱歌还是大众)
  • ADJECTIVE NOUN(复数)
  • NOUN(唱歌或群众)NOUN(pl。)
  • NOUN(唱歌或群众)

总之,我认为可以改善结果的简单操作是找到每个单词的POS标记,并选择大多数名词来评估新的RSS提要。您可以使用WordNet来查找每个单词的POS标记,如上所述,Web上有许多与WordNet字典集成的库。当然,词干对于分类过程也是必不可少的,必须予以保持。

我希望这会有所帮助。

答案 1 :(得分:1)

尝试完全关闭词干。斯坦福大学的作者简介provide a rough justification为什么在文本分类背景下会产生伤害,并且至少没有帮助。

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

还有一些事情需要尝试:

  • 为什么只有64个字?我会大量增加这个数字,但最好不要有限制。
  • 试试tf-idf (term frequency, inverse document frequency)。你现在使用的只是tf。如果你将它乘以idf,你可以减轻像“show”这样的常见和无信息词汇所引起的问题。鉴于您使用的顶级单词很少,这一点尤其重要。
  • 增加培训语料库的大小。
  • 尝试用双卦,三元组等组合,以及不同N-grams的组合(你现在只使用unigrams)。

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