wmu*_*ute 65 machine-learning naivebayes
我使用Naive Bayes分类器将数千个文档分类为30个不同的类别.我已经实现了Naive Bayes分类器,并且通过一些特征选择(主要是过滤无用的单词),我获得了大约30%的测试精度,45%的训练准确度.这明显优于随机,但我希望它更好.
我尝试用NB实现AdaBoost,但它似乎没有给出明显更好的结果(文献似乎对此有所分歧,一些论文称AdaBoost与NB没有给出更好的结果,其他人这样做).你知道NB的任何其他扩展可能会提供更好的准确性吗?
dou*_*oug 101
根据我的经验,经过适当训练的朴素贝叶斯分类器通常非常准确(而且训练速度非常快 - 明显快于我曾经使用的任何分类器 - 建造者).
因此,当您想要改进分类器预测时,您可以查看以下几个位置:
调整你的分类器(调整分类器的可调参数);
应用某种分类器组合技术(例如,整合,提升,装袋); 或者你可以
查看提供给分类器的数据 - 添加更多数据,改进基本解析或优化从数据中选择的功能.
w/r/t朴素贝叶斯分类器,参数调整有限; 我建议您关注您的数据 - 即预处理的质量和功能选择.
I.数据分析(预处理)
我假设您的原始数据类似于每个数据点的一串原始文本,通过一系列处理步骤,您将每个字符串转换为每个数据点的结构化矢量(1D数组),使得每个偏移对应于一个特征(通常是一个单词),该偏移中的值对应于频率.
干预:手动还是使用词干库?流行的开源软件是Porter,Lancaster和Snowball.因此,例如,如果你有一个程序员,程序,编程,在给定数据点编程的术语,一个词干分析器会将它们减少到一个词干(可能是程序),所以你的那个数据点的术语向量的值为4功能程序,这可能是你想要的.
同义词发现:与词干相同的想法 - 将相关词汇折叠成单个词; 因此,同义词查找器可以识别开发人员,程序员,编码人员和软件工程师,并将其转换为单个术语
中性词:不同类别频率相似的词会产生不良特征
II.特征选择
考虑NBC的典型用例:过滤垃圾邮件; 您可以快速查看它是如何失败的,并且您可以快速了解如何改进它.例如,高于平均水平的垃圾邮件过滤器具有细微差别的功能,例如:所有大写字词的频率,标题中单词的频率以及标题中感叹号的出现.另外,最佳特征通常不是单个单词,而是例如单词对或更大的单词组.
III.特定的分类器优化
而不是30个类使用"一对多"方案 - 换句话说,你从一个两级分类器(A类和"所有其他")开始,然后将"all else"类中的结果返回给用于分类为B类和"所有其他"的算法等.
Fisher方法(可能是优化Naive Bayes分类器的最常用方法.)对我而言,我认为Fisher 正常化(更准确地说,标准化)输入概率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分类代码,该代码在许多任务中都表现出色,请务必尝试一下。
| 归档时间: |
|
| 查看次数: |
37801 次 |
| 最近记录: |