【问题标题】:Using document length in the Naive Bayes Classifier of NLTK Python在 NLTK Python 的朴素贝叶斯分类器中使用文档长度
【发布时间】:2011-07-12 00:15:18
【问题描述】:

我正在使用 Python 中的 NLTK 构建垃圾邮件过滤器。我现在检查单词的出现并使用 NaiveBayesClassifier 产生 0.98 的准确度和 0.92 的垃圾邮件和非垃圾邮件的 F 度量:0.98。但是,当检查我的程序错误的文档时,我注意到很多被归类为非垃圾邮件的垃圾邮件都是非常短的消息。

所以我想将文档的长度作为 NaiveBayesClassifier 的一个特征。问题是它现在只处理二进制值。除了例如说:length

(p.s. 我已经构建了类似于 http://nltk.googlecode.com/svn/trunk/doc/book/ch06.html 示例的垃圾邮件检测器)

【问题讨论】:

    标签: python nltk spam-prevention feature-detection


    【解决方案1】:

    有 MultiNomial NaiveBayes 算法可以处理范围值,但未在 NLTK 中实现。对于 NLTK NaiveBayesClassifier,您可以尝试将几个不同的长度阈值作为二进制特征。我还建议尝试使用 Maxent 分类器,看看它如何处理较小的文本。

    【讨论】:

      【解决方案2】:

      NLTK 的朴素贝叶斯实现没有这样做,但您可以将 NaiveBayesClassifier 的预测与文档长度分布结合起来。 NLTK 的 prob_classify 方法将为您提供给定文档中单词的类的条件概率分布,即 P(cl|doc)。你想要的是 P(cl|doc,len) - 给定文档中的单词及其长度的类的概率。如果我们再做一些独立性假设,我们会得到:

      P(cl|doc,len) = (P(doc,len|cl) * P(cl)) / P(doc,len)
                    = (P(doc|cl) * P(len|cl) * P(cl)) / (P(doc) * P(len))
                    = (P(doc|cl) * P(cl)) / P(doc) * P(len|cl) / P(len)
                    = P(cl|doc) * P(len|cl) / P(len)
      

      你已经从 prob_classify 得到了第一项,所以剩下要做的就是估计 P(len|cl) 和 P(len)。

      在对文档长度进行建模时,您可以随心所欲,但在开始时,您可以假设文档长度的日志是正态分布的。如果你知道每个类和整体的日志文档长度的均值和标准差,那么计算 P(len|cl) 和 P(len) 就很容易了。

      这是估计 P(len) 的一种方法:

      from nltk.corpus import movie_reviews
      from math import sqrt,log
      import scipy
      
      loglens = [log(len(movie_reviews.words(f))) for f in movie_reviews.fileids()]
      sd = sqrt(scipy.var(loglens)) 
      mu = scipy.mean(loglens)
      
      p = scipy.stats.norm(mu,sd)
      

      需要记住的唯一棘手的事情是,这是一个对数长度而不是长度的分布,而且它是一个连续分布。因此,长度为 L 的文档的概率为:

      p.cdf(log(L+1)) - p.cdf(log(L))
      

      条件长度分布可以以相同的方式估计,使用每个类中文档的对数长度。这应该为您提供 P(cl|doc,len) 所需的内容。

      【讨论】:

        猜你喜欢
        • 2016-09-28
        • 2017-04-19
        • 2013-12-08
        • 1970-01-01
        • 2012-12-05
        • 2015-12-20
        • 2011-11-13
        • 2012-11-02
        • 2014-01-13
        相关资源
        最近更新 更多