我使用一个天真的贝斯分类来分类的数千份文件成30种不同的类别。我已经实现了一个天真的贝斯分类器,并与一些功能选择(主要过滤没用的话),我已经得到了关于30%的测试准确性,与45%的培训的准确性。这是明显好于随机的,但是我希望它能更好。

我已经试过执行人与NB,但它不会出现得到明显更好的结果(文献中似乎分裂对此,一些文件说人NB并不得到更好的结果,其他人做)。你知道的任何其他的扩展到NB可能得到更好的准确性?

有帮助吗?

解决方案

根据我的经验,经过适当训练的幼稚贝叶斯分类器通常非常准确(并且训练非常快 - 比我曾经使用过的任何分类器构建器更快)。

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

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

  • 申请 分类器组合技术 (例如,结合,提升,包装);或者您可以

  • 看着 数据 喂入分类器 - 添加更多数据,改进基本解析或完善您从数据中选择的功能。

w/r/t幼稚的贝叶斯分类器,参数调整有限;我建议专注于您的数据 - IE,预处理的质量和功能选择。

I.数据解析(预处理)

我认为您的原始数据就像每个数据点的原始文本字符串一样,通过一系列处理步骤,您将每个字符串转换为每个数据点的结构化向量(1D数组),以使每个偏移量都对应于一个功能(通常一个单词),该偏移中的值对应于频率。

  • : :要么手动或使用茎库?受欢迎的开源是波特,兰开斯特和雪球。因此,例如,如果您有条款 程序员,程序,进程,编程 在给定的数据点中,茎员会将它们降低到一个词干(可能 程序)因此,该数据点的术语向量对于功能程序的值为4,这可能是您想要的。

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

  • 中立的单词: :跨班级的单词相似的频率使功能不佳


ii。功能选择

考虑用于NBC的典型用例:过滤垃圾邮件;您可以快速看到它是如何失败的,并且很快就可以看到如何改进它。例如,高于平均水平的垃圾邮件过滤器具有细微的特征,例如:所有上限的单词频率,标题中的单词频率以及标题中的感叹点的发生。此外, 最好的功能通常不是单个单词,而是单词,一对单词或较大的单词群.

iii。特定的分类器优化

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

Fisher方法 (可能是优化天真贝叶斯分类器的最常见方法。)对我来说,我认为费舍尔是 标准化 (更正确, 标准化)NBC使用特征概率来构建“全文件”概率的输入概率。 Fisher方法计算了类别的概率 每个 然后,文档的功能结合了这些特征概率和比较,将概率与随机特征集的概率相结合。

其他提示

我建议使用一个 SGDClassifier 如同在 和调整这方面的正规化的强度。

还试图为你式在TFIDF你使用通过调整参数 TFIFVectorizer.

  • 我通常看到,文本的分类问题 SVM或后勤Regressioin 训练的时候,一个与所有优于NB。你可以看到 这个不错的文章由斯坦福大学的人 对于较长的文件SVM优于NB。代码的文件,其中结合使用SVM和NB(NBSVM)是 在这里,.

  • 第二,调TFIDF式(例如次线性tf,smooth_idf).

  • 恢复正常 你的样l2或l1正常化的(默认在Tfidfvectorization),因为它弥补了不同的文件的长度。

  • 多层感知, 通常得到更好的结果比NB或SVM因为非线性度介绍其固有的许多文本分类问题。我已经实现了高度平行一个使用Theano/千层面,这是很容易使用和可下载的 在这里,.

  • 尝试 你l1/l2/elasticnet正规化.它使一个巨大的差异,在SGDClassifier/SVM/逻辑回归。

  • 尝试使用 n-克 这是配置tfidfvectorizer.

  • 如果你的文件的结构(例如已 标题)考虑采用不同的特征对不同的部分。例如添加title_word1到你的文档,如果word1发生在该标题的文件。

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

  • 考虑使用 meta的信息 有关文件(例如时间的创造、作者姓名,网址上的文件,等等)。

  • 最近 Facebook 公布了他们 FastText分类代码 其执行很多任务,一定要尝试。

使用拉普拉斯校正以及adaboost。

在Adaboost中,首先将权重分配给培训数据集中的每个数据元组。使用Intial权重设置 init_weights 方法,将每个重量初始化为 1/d, , 在哪里 d 是训练数据集的大小。

然后, generate_classifiers 方法称为运行 k 时代,创建 k 幼稚的贝叶斯分类器的实例。然后将这些分类器加权,并在每个分类器上运行测试数据。分类器加权“投票”的总和构成了最终分类。

保持n尺寸小也使NB获得高精度的结果。从核心处,随着n尺寸增加其准确性降低,

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top