Machine learning 提高朴素贝叶斯分类器准确性的方法?

Machine learning 提高朴素贝叶斯分类器准确性的方法?,machine-learning,naivebayes,Machine Learning,Naivebayes,我使用朴素贝叶斯分类器将数千个文档分类为30个不同的类别。我实现了一个朴素贝叶斯分类器,通过一些特征选择(主要是过滤无用的单词),我得到了大约30%的测试准确率,45%的训练准确率。这比随机的要好得多,但我希望它更好 我已经尝试过用NB实现AdaBoost,但它似乎没有给出明显更好的结果(关于这一点的文献似乎存在分歧,一些论文说用NB实现AdaBoost不会给出更好的结果,其他人会)。你知道NB的其他扩展有可能提供更好的准确度吗?根据我的经验,经过适当训练的朴素贝叶斯分类器通常具有惊人的准确度(

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


我已经尝试过用NB实现AdaBoost,但它似乎没有给出明显更好的结果(关于这一点的文献似乎存在分歧,一些论文说用NB实现AdaBoost不会给出更好的结果,其他人会)。你知道NB的其他扩展有可能提供更好的准确度吗?

根据我的经验,经过适当训练的朴素贝叶斯分类器通常具有惊人的准确度(而且训练速度非常快,明显比我使用过的任何分类器构建器都要快)

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

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

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

  • 查看输入分类器的数据——或者添加更多数据, 改进您的基本解析,或优化您从中选择的功能 数据

w/r/t朴素贝叶斯分类器,参数整定有限;我建议您将重点放在数据上,即预处理和特征选择的质量。

I.数据解析(预处理)

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

  • 词干分析:手动还是使用词干分析库?流行的开源软件有Porter、Lancaster和Snowball。所以 例如,如果你有程序员,程序,编程, 在给定的数据点上编程,词干分析器将把它们简化为 单干(可能是程序)所以你的术语向量 特征程序的点的值为4,即 也许是你想要的

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

  • 中性词:在不同的班级中,频率相近的词表现出很差的特征


II。功能选择

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

III.特定分类器优化

不是30个类使用“一对多”方案,而是换言之,从两类分类器(类a和“所有其他”)开始,然后将“所有其他”类中的结果返回给算法,以便分类为类B和“所有其他”等

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

保持n大小较小也可以使NB得到高精度的结果。在核心部分,随着n尺寸的增加,其精度降低,

选择它们之间相关性较小的特征。并尝试一次使用不同的功能组合。

我建议在中使用sgdclassizer,并根据正则化强度对其进行调整

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

  • 我通常看到,对于文本分类问题SVM或Logistic回归,当训练一对全部时,其性能优于NB。正如您在较长文档中所看到的,SVM优于NB。使用SVM和NB组合(NBSVM)的论文代码为

  • 其次,调整TFIDF公式(例如,次线性tf、平滑idf)

  • 标准化使用l2或l1标准化(Tfidfvectorization中的默认值)对样本进行标准化,因为它可以补偿不同的文档长度

  • 多层感知器通常比NB或SVM获得更好的结果,因为它引入了许多文本分类问题固有的非线性。我已经用Theano/Lasagne实现了一个高度并行的,易于使用和下载的

  • 尝试调整l1/l2/elasticnet正则化。这在SGDClassizer/SVM/Logistic回归中产生了巨大的差异

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

  • >P>如果您的文档具有结构(例如,<>强>标题>强>,请考虑使用不同部分的不同特性。例如,如果word1出现在文档的标题中,请在文档中添加title\u word1

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

  • 考虑使用