NLTK朴素贝叶斯拒绝一切

时间:2012-05-29 18:23:52

标签: python nltk

我正在尝试使用NLTK朴素贝叶斯分类器猜测我在arXiv.org上会喜欢哪些文章,而且我从大约500篇文章中获得了85%的准确率。不幸的是,我意识到这只是将所有文章归类为“坏”

从好的方面来看,它为我提供了一系列有意义的信息功能。 我在这个网站上搜索了https://stackoverflow.com/search?q=nltk+naive+bayes并查看了NLTK's book以及another tutorial(都处理了来自NLTK自己文件的电影评论)。

我如何训练这个分类器有什么明显的错误吗?希望下面的代码片段足够了。是否有可能拒绝所有正确的Naive Bayes头衔?

def title_words(doc, vocab):
    """ features for document classifier"""
    words = set([x.lower() for x in doc[0].replace(". ", " ").split(' ')])
    features = dict([( 'contains(%s)' % word , (word in words)) for word in vocab] )
    return features

def(classify)
# get articles from database
conn = sqlite3.connect('arxiv.db')
c = conn.cursor()

# each row in the database is a 3-tuple: (title, abstract, tag)
articles = c.execute("select * from arXiv").fetchall()

# build vocabulary list
for the in articles:
        vocab = vocab | set([x.lower() for x in the[0].split(' ')])
# get feature dictionary from title
titles = [(title_words(x, vocab),x[2])  for x in articles]

n = len(titles)/2
train_set, test_set = titles[:n], titles[n:]
classifier = nltk.NaiveBayesClassifier.train(train_set)

print nltk.classify.accuracy(classifier, test_set)
classifier.show_most_informative_features(20)

conn.close()

<小时/> 如果功能的数量在2000左右会有问题吗?像“the”和“because”这样的常用词语不太可能区分“有趣”和“无聊”。我想相反,我正在寻找不同组合的专业术语,所以我希望分类器能够找出哪些专业术语会让我读到...

0 个答案:

没有答案