如何提高朴素贝叶斯分类器的准确性?
machine-learning
5
0

我正在使用朴素贝叶斯分类器将数千个文档分类为30个不同的类别。我已经实现了朴素贝叶斯分类器,并且通过一些功能选择(主要是过滤无用的单词),我获得了大约30%的测试准确度和45%的训练准确度。这比随机的要好得多,但是我希望它更好。

我已经尝试过用NB实现AdaBoost,但是它似乎并没有给出明显更好的结果(关于这方面的文献似乎有些分歧,有些论文说,使用NB的AdaBoost不会给出更好的结果,其他人则给出了)。您是否知道NB的其他扩展可能会带来更好的准确性?

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

以我的经验,训练有素的朴素贝叶斯分类器通常令人惊讶地准确(且训练速度非常快,比我曾经使用的任何分类器生成器都要快)。

因此,当您要改善分类器预测时,可以在几个地方查看:

  • 调整您的分类器 (调整分类器的可调参数);

  • 应用某种分类器组合技术 (例如,合奏,增强,装袋);或者你可以

  • 查看提供给分类器的数据 -添加更多数据,改善基本分析或优化从数据中选择的功能。

w / r / t天真贝叶斯分类器,参数调整有限;我建议重点关注您的数据,即预处理的质量和功能选择。

一,数据解析(预处理)

我假设您的原始数据类似于每个数据点的原始文本字符串,通过一系列处理步骤,您可以将每个字符串转换为每个数据点的结构化矢量(一维数组),以使每个偏移量对应一个特征(通常是一个字),并且该偏移量中的值对应于频率。

  • 词干 :手动还是使用词干库?最受欢迎的开源软件有Porter,Lancaster和Snowball。因此,举例来说,如果您在给定的数据点中有术语“ 程序员”,“程序”,“编程”,“编程器” ,则词干分析器会将它们简化为单个词干(可能是program ),因此该数据点的术语向量的值等于功能程序,这可能是您想要的。

  • 同义词发现 :与词干相同的想法-将相关单词折叠成一个单词;因此同义词查找器可以识别开发人员,程序员,编码人员和软件工程师,并将其合并为一个术语

  • 中性字词 :跨班级出现频率相似的字词的功能较差


二。功能选择

考虑NBC的典型用例:过滤垃圾邮件;您可以快速查看它如何失败,也可以快速查看如何改进它。例如,高于平均水平的垃圾邮件过滤器具有细微的功能,例如:所有大写字母的单词出现频率,标题中单词的出现频率以及标题中出现感叹号。另外, 最佳特征通常不是单个单词而是例如单词对或更大的单词组

三,特定分类器优化

而不是使用“一对多”计划而不是30个类-换句话说,您从一个两类分类器(A类和“所有其他”)开始,然后将“所有其他”类中的结果返回到分类为B类和“所有其他”等的算法。

费舍尔方法 (可能是最优化朴素贝叶斯分类器的最常用方法。)对我来说,我认为费舍尔将输入概率归一化 (更正确地说是标准化 )NBC使用特征概率构建“整个文档”概率。 Fisher方法为文档的每个特征计算类别的概率,然后组合这些特征概率,并将该组合概率与一组特征的随机概率进行比较。

收藏
评论

我建议像这样使用SGDClassifier并根据正则化强度对其进行调整。

也可以尝试通过调整TFIFVectorizer的参数来调整正在使用的TFIDF中的公式。

  • 我通常会看到,针对文本分类问题的SVM或Logistic回归训练得比所有人都要好。正如您在斯坦福大学员工的这篇不错的文章中所见,SVM的性能优于NB。针对使用SVM和NB(NBSVM)的组合的文件的代码在这里

  • 其次,调整您的TFIDF公式(例如,亚线性tf,smooth_idf)。

  • 正常化 L2或L1正常化(默认Tfidfvectorization)的样品,因为它弥补了不同的文档的长度。

  • 多层Perceptron通常会比NB或SVM获得更好的结果,因为引入了许多文本分类问题所固有的非线性。我使用Theano / Lasagne实现了一个高度并行的应用程序,可在此处轻松使用和下载。

  • 尝试调整您的l1 / l2 / elasticnet正则化 。它在SGDClassifier / SVM / Logistic回归中具有巨大的差异。

  • 尝试使用可在tfidfvectorizer中配置的n-gram

  • 如果您的文档具有结构(例如, 标题 ),请考虑对不同部分使用不同的功能。例如,如果word1出现在文档标题中,则将title_word1添加到文档中。

  • 考虑使用文档长度作为特征(例如,单词或字符的数量)。

  • 考虑使用有关文档的元信息 (例如,创建时间,作者姓名,文档的网址等)。

  • 最近, Facebook发布了他们的FastText分类代码 ,该代码在许多任务中都表现出色,请务必尝试一下。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号