我正在尝试使用 NLTK 朴素贝叶斯分类器来猜测我会喜欢 arXiv.org 上的哪些文章,实际上我从大约 500 篇文章标题中获得了 >85% 的准确率。不幸的是,我意识到它只是将所有文章归类为“坏”
从好的方面来说,它为我提供了一些有意义的信息功能列表。我在这个网站上搜索了https://stackoverflow.com/search?q=nltk+naive+bayes并查看了NLTK 的书以及另一个教程(两者都处理来自 NLTK 自己文件的电影评论)。
我如何训练这个分类器有什么明显的错误吗?希望下面的代码片段就足够了。是否可以拒绝所有适合朴素贝叶斯的标题?
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”这样的常用词不太可能区分“interesting”和“boring”。相反,我想我正在寻找不同组合的专业术语,所以我希望分类器会挑选出哪些专业术语会诱使我阅读......