我看了一下,并尝试了scikit-learn的Multinomial天真贝叶斯分类器教程。

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

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

最佳答案

CountVectorizer将为您提取三字组(使用ngram_range=(3, 3))。 text feature extraction documentation对此进行了介绍。然后,只需将MultinomialNB与转换后的特征矩阵完全一样使用即可。

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

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

那有什么不同?好吧,第一个术语可以写成

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

因此,这实际上就像使用三字组,二元组和单字组(尽管不直接估计二元组/单字组术语)。

关于python - scikit学习为Trigram分类器使用多项朴素贝叶斯吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17333765/

10-12 22:26