Python朴素贝叶斯分类推文到类别的方法
我正在尝试实现一个朴素贝叶斯算法,用来读取csv文件中的推文,并将它们分类到我定义的类别中(比如:科技、科学、政治)。
我想使用NLTK的朴素贝叶斯分类算法,但网上的例子和我需要做的事情差得很远。
我最大的困惑之一是,如何提高朴素贝叶斯的分类准确率?
**我希望能得到一些关于我需要采取的详细步骤的指导,以便进行分类。
- 我是否需要为每个类别创建单独的csv文件,并手动将推文放进去?
- 如果我这样做,算法要怎么训练?算法又是如何进行测试的?**
我在网上查了一些资料,发现了一些简短的例子,比如TextBlob,它利用NLTK的朴素贝叶斯算法来进行推文的情感分类。这个例子简单易懂,但对初学者来说,调整起来有点困难。
http://stevenloria.com/how-to-build-a-text-classification-system-with-python-and-textblob/
在上面链接的例子中,他是如何进行测试的,因为他已经把情感放在推文旁边了?我以为测试时应该隐藏第二个参数。
train = [
('I love this sandwich.', 'pos'),
('This is an amazing place!', 'pos'),
('I feel very good about these beers.', 'pos'),
('This is my best work.', 'pos'),
("What an awesome view", 'pos'),
('I do not like this restaurant', 'neg'),
('I am tired of this stuff.', 'neg'),
("I can't deal with this", 'neg'),
('He is my sworn enemy!', 'neg'),
('My boss is horrible.', 'neg')
]
test = [
('The beer was good.', 'pos'),
('I do not enjoy my job', 'neg'),
("I ain't feeling dandy today.", 'neg'),
("I feel amazing!", 'pos'),
('Gary is a friend of mine.', 'pos'),
("I can't believe I'm doing this.", 'neg')
]
1 个回答
4
首先,你得明白贝叶斯是怎么运作的:
换句话说,你需要找出 P(B|A)、P(A) 和 P(B)。在你的例子中,P(A|B) = P(积极 | 句子)。也就是说:
- P(B) = 句子中出现这些具体单词的概率
- P(A) = 积极情感的概率
- P(B | A) = 在给定积极情感的情况下,找到 B 中单词的概率
你需要做的事情是:
- 把句子拆分成单词
- 去掉一些“填充词”,比如“the”、“and”、“is”、“was”等等
- 为每个句子创建一个属性列表,比如“好”、“坏”、“惊人”等等。这些就成了你贝叶斯分类器的特征。
- 找出构成“积极”情感的概率 B(特征的百分比)。
接下来,给定一个测试句子:
- 像处理训练句子那样,把它拆分成特征。
- 找出这些单词的得分(B)
- 计算这些单词表示“积极”或“消极”情感的概率(=P(A|B))。
这些步骤有点复杂,想要更具体的指导可以参考这里,你在问题中已经提到第二个链接:
- http://andybromberg.com/sentiment-analysis-python/
- http://stevenloria.com/how-to-build-a-text-classification-system-with-python-and-textblob/
针对你的具体问题:
在上面链接的例子中,他是如何实现测试的,因为他已经把情感放在推文旁边了?我以为测试时应该隐藏第二个参数。
为了测试,你需要知道正确的结果是什么。否则你就无法判断算法的表现,因为它总会给你“某种”答案。这就是为什么你在测试中必须包含标签(第二个参数)。