我正在使用朴素贝叶斯分类器将数千个文档分类为30个不同的类别。我已经实现了朴素贝叶斯分类器,并且通过一些功能选择(主要是过滤无用的单词),我获得了大约30%的测试准确度和45%的训练准确度。这明显好于随机,但我希望它会更好。
我已经尝试过用NB实现AdaBoost,但是它似乎并没有给出明显更好的结果(关于这方面的文献似乎有些分歧,有些论文说使用NB的AdaBoost不会给出更好的结果,另一些则给出了)。您是否知道对NB的其他扩展可能会带来更高的准确性?
Answers:
以我的经验,训练有素的朴素贝叶斯分类器通常令人惊讶地准确(且训练速度非常快,比我曾经使用的任何分类器构建器都要快)。
因此,当您要改进分类器预测时,可以在几个地方查看:
调整您的分类器(调整分类器的可调参数);
应用某种分类器组合技术(例如,合奏,增强,装袋);或者你可以
查看提供给分类器的数据-添加更多数据,改善基本分析或优化从数据中选择的功能。
w / r / t天真贝叶斯分类器,参数调整有限;我建议重点关注您的数据,即预处理的质量和功能选择。
I.数据解析(预处理)
我假设您的原始数据类似于每个数据点的原始文本字符串,通过一系列处理步骤,您可以将每个字符串转换为每个数据点的结构化矢量(一维数组),以使每个偏移量对应一个特征(通常是一个字),并且该偏移量中的值对应于频率。
词干:手动还是使用词干库?最受欢迎的开源软件有Porter,Lancaster和Snowball。因此,举例来说,如果您在给定的数据点中有术语“程序员”,“程序”,“编程”,“编程器”,则词干分析器会将它们简化为单个词干(可能是program),因此该数据点的术语向量的值为功能程序,这可能是您想要的。
同义词发现:与词干相同的想法-将相关单词折叠成一个单词;因此同义词查找器可以识别开发人员,程序员,编码人员和软件工程师,并将其合并为一个术语
中性字词:跨班级出现频率相似的字词的功能较差
二。功能选择
考虑NBC的典型用例:过滤垃圾邮件;您可以快速看到它如何失败,也可以很快看到如何改进它。例如,高于平均水平的垃圾邮件过滤器具有细微的特征,例如:所有大写字母的单词出现频率,标题中单词的出现频率以及标题中出现感叹号。另外,最佳特征通常不是单个单词,而是例如成对的单词或较大的单词组。
三,特定分类器优化
而不是使用“一对多”计划而不是30个类-换句话说,您从一个两类分类器(A类和“所有其他”)开始,然后将“所有其他”类中的结果返回到分类为B类和“所有其他”等的算法。
费舍尔方法(可能是最优化朴素贝叶斯分类器的最常用方法。)对我而言,我认为费舍尔将输入概率归一化(更正确地说是标准化)NBC使用特征概率构建“整个文档”概率。Fisher方法为文档的每个特征计算类别的概率,然后组合这些特征概率,并将该组合的概率与特征的随机集合的概率进行比较。
我建议像这样使用SGDClassifier并根据正则化强度对其进行调整。
也可以尝试通过调整TFIFVectorizer的参数来调整正在使用的TFIDF中的公式。
我通常会看到针对文本分类问题的SVM或Logistic回归训练得比所有人都胜过NB。正如您在斯坦福大学的一篇不错的文章中所见,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分类代码,该代码在许多任务中都表现出色,请务必尝试一下。
因为我们通过乘以概率来计算概率,所以将概率空间更改为对数概率空间,结果将非常小。当我们更改为对数概率特征时,我们可以解决运行不足问题。
当我们在要素之间建立关联时,朴素的Byes会基于独立性的假设进行工作,这意味着一个要素依赖于另一个要素,那么我们的假设就会失败。有关关联的更多信息,请参见此处
朴素贝叶斯需要的数据少于逻辑回归,因为它仅需要数据来了解每个属性与输出变量(而不是交互作用)隔离的概率关系。
如果测试数据集的频率为零,则应用平滑技术“拉普拉斯校正”来预测测试数据集的类别。
以下帖子中对此进行了详细说明,请参阅以下帖子。
保持n尺寸较小也可使NB获得高精度结果。从本质上讲,随着n大小的增加,其精度会降低,
选择它们之间相关性较小的特征。并尝试一次使用不同的功能组合。