1

我已经查看并试用了 scikit-learn 关于其多项式朴素贝叶斯分类器的教程。

我想用它来对文本文档进行分类,而关于 NB 的问题在于它将其 P(document|label) 视为其所有独立特征(单词)的乘积。现在,我需要尝试做 3 个三元分类器,其中 P(document|label) = P(wordX|wordX-1,wordX-2,label) * P(wordX-1|wordX-2,wordX-3,标签)。

scikit learn 在哪里支持我可以实现此语言模型并扩展 NB 分类器以基于此执行分类的任何内容?

4

1 回答 1

4

CountVectorizer将为您提取三元组(使用ngram_range=(3, 3))。文本特征提取文档介绍了这一点。然后,只需MultinomialNB像以前一样使用转换后的特征矩阵。

请注意,这实际上是建模:

P(文档 | 标签) = P(单词X , 单词X-1 , 单词X-2 | 标签) * P(单词X-1 , 单词X-2 , 单词X-3 | 标签) * ...

那有什么不同?那么,第一项可以写成

P(word X , word X-1 , word X-2 | label) = P(word X | word X-1 , word X-2 , label) * P(word X-1 , word X-2 | label)

当然,所有其他术语也可以这样写,所以你最终会得到(为了简洁,去掉标签上的下标和条件):

P(X | X-1, X-2) P(X-1 | X-2, X-3) ... P(3 | 2, 1) P(X-1, X-2) P(X -2, X-3) ... P(2, 1)

现在,P(X-1, X-2) 可以写成 P(X-1 | X-2) P(X-2)。所以如果我们对所有这些条款都这样做,我们有

P(X | X-1, X-2) P(X-1 | X-2, X-3) ... P(3 | 2, 1) P(X-1 | X-2) P(X -2 | X-3) ... P(2 | 1) P(X-2) P(X-1) ... P(1)

所以这实际上就像使用三元组、二元组和一元组(尽管不直接估计二元组/一元组)。

于 2013-06-27T02:55:32.927 回答