我可以使用NaiveBayesClassifier对两个以上的分类进行分类吗?

时间:2014-01-20 10:10:23

标签: python classification nltk

我在NaiveBayesClassifier中看到的大多数例子只有两个:'pos','neg'。我想谈谈文本的主题,如娱乐,体育,电影,政治,文学。可以为此训练NaiveBayesClassifier,还是应该在其他地方寻找?

1 个答案:

答案 0 :(得分:8)

当然可以。当您将训练集传递到NaiveBayesClassifier.train方法时,它将为训练集中的每个标签创建一个贝叶斯模型。如果您的训练集有多个标签,那么您的分类器将分类为多个标签。如果您的训练集只有2个标签,那么您的分类器将只提供两个分类。当您要求分类器进行分类时,它将返回给定特征集的概率最高的模型。

在贝叶斯分类器中,为每个标签创建概率模型。选择与最佳特征匹配的模型。这是一个组成的例子:

import nltk

articles = [({'entertaining':0.6, 'informative':0.2, 'statistical':0.6}, 'sports'),
            ({'entertaining':0.7, 'informative':0.2, 'statistical':0.8}, 'sports'),
            ({'entertaining':0.1, 'informative':0.7, 'statistical':0.2}, 'news'),
            ({'entertaining':0.2, 'informative':0.8, 'statistical':0.3}, 'news'),
            ({'entertaining':0.8, 'informative':0.2, 'statistical':0.1}, 'movies')]

classifier = nltk.NaiveBayesClassifier.train(articles)

label = classifier.classify({'entertaining':0.9, 'informative':0.2, 'statistical':0.1})

print label
#movies    

probabilities = classifier.prob_classify({'entertaining':0.9, 'informative':0.2, 'statistical':0.1})

for sample in probabilities.samples():
    print "{0}: {1}".format(sample, probabilities.prob(sample))
#news:   0.0580
#sports: 0.2999
#movies: 0.6522