我使用Naive Bayes分类器将数千个文档分类为30个不同的类别。我已经实现了Naive Bayes分类器,并且通过一些特征选择(主要是过滤无用的单词),我获得了大约30%的测试精度,45%的训练准确度。这明显优于随机,但我希望它更好。
我尝试用NB实现AdaBoost,但它似乎没有给出明显更好的结果(文献似乎对此有所分歧,一些论文称AdaBoost与NB没有给出更好的结果,其他人这样做)。你知道NB的任何其他扩展可能会提供更好的准确性吗?
根据我的经验,经过适当训练的朴素贝叶斯分类器通常非常准确(而且训练速度非常快 - 明显快于我曾经使用的任何分类器 - 建造者)。
因此,当您想要改进分类器预测时,您可以查看以下几个位置:
w / r / t朴素贝叶斯分类器,参数调整有限;我建议您关注您的数据 - 即预处理的质量和功能选择。
I.数据分析(预处理)
我假设您的原始数据类似于每个数据点的一串原始文本,通过一系列处理步骤,您将每个字符串转换为每个数据点的结构化矢量(1D数组),使得每个偏移对应于一个特征(通常是一个单词),该偏移中的值对应于频率。
II。特征选择
考虑NBC的典型用例:过滤垃圾邮件;您可以快速查看它是如何失败的,并且您可以快速了解如何改进它。例如,高于平均水平的垃圾邮件过滤器具有细微差别的功能,例如:所有大写字词的频率,标题中单词的频率以及标题中感叹号的出现。另外,最佳特征通常不是单个单词,而是例如单词对或更大的单词组。
III。特定的分类器优化
而不是30个类使用“一对多”方案 - 换句话说,你从一个两级分类器(A类和“所有其他”)开始,然后将“all else”类中的结果返回给用于分类为B类和“所有其他”的算法等。
Fisher方法(可能是优化Naive Bayes分类器的最常用方法。)对我而言,我认为Fisher正常化(更准确地说,标准化)输入概率NBC使用特征概率来构造“整个文档”概率。 Fisher方法计算文档的每个特征的类别概率,然后组合这些特征概率,并将该组合概率与随机特征集的概率进行比较。
我建议在this中使用SGDClassifier并根据正则化强度进行调整。
还尝试通过调整TFIFVectorizer的参数来调整您正在使用的TFIDF中的公式。
使用拉普拉斯校正和AdaBoost。
在AdaBoost中,首先为训练数据集中的每个数据元组分配权重。使用init_weights
方法设置初始权重,该方法将每个权重初始化为1/d
,其中d
是训练数据集的大小。
然后,调用generate_classifiers
方法,该方法运行k
次,创建NaïveBayes分类器的k
实例。然后对这些分类器进行加权,并在每个分类器上运行测试数据。分类器的加权“投票”的总和构成最终分类。
保持n尺寸小也使NB得到高精度的结果。而在核心,随着n尺寸的增加,其精度降低,
选择它们之间相关性较低的要素。并尝试一次使用不同的功能组合。