我看了一下,并尝试了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/