scikit learn 使用多项式朴素贝叶斯作为三元组分类器?

goh*_*goh 2 python scipy scikit-learn naivebayes

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

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

scikit learn 在哪里支持任何东西,我可以实现这个语言模型并扩展 NB 分类器以基于此执行分类?

Dou*_*gal 5

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

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

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

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

P(字X , 字X-1 , 字X-2 | 标签) = P(字X | 字X-1 , 字X-2 , 标签) * P(字X-1 , 字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-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)

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