贝叶斯文本分类代码
时间: 2023-07-05 20:09:58 浏览: 92
以下是一个简单的贝叶斯文本分类的Python代码示例:
```python
import math
class NaiveBayesClassifier:
def __init__(self, classes):
self.classes = classes
self.num_classes = len(classes)
self.vocab = set()
self.class_word_count = [{} for _ in range(self.num_classes)]
self.class_doc_count = [0 for _ in range(self.num_classes)]
self.total_docs = 0
def train(self, documents, labels):
for doc, label in zip(documents, labels):
words = doc.split()
self.class_doc_count[label] += 1
self.total_docs += 1
for word in words:
self.vocab.add(word)
if word not in self.class_word_count[label]:
self.class_word_count[label][word] = 0
self.class_word_count[label][word] += 1
def predict(self, document):
words = document.split()
scores = [0 for _ in range(self.num_classes)]
for i in range(self.num_classes):
# Prior probability
scores[i] = math.log(self.class_doc_count[i] / self.total_docs)
for word in words:
# Likelihood probability
count = self.class_word_count[i].get(word, 0) + 1
total = sum(self.class_word_count[i].values()) + len(self.vocab)
scores[i] += math.log(count / total)
# Return the index of the class with the highest score
return scores.index(max(scores))
```
在这个实现中,我们首先在`__init__`方法中初始化了一些变量和数据结构,包括类别列表、每个类别的词计数、每个类别的文档计数、词汇表和总文档数。`train`方法接收一个文档列表和一个标签列表,并用它们来更新类别的计数和词计数。`predict`方法接收一个文档字符串,并计算它属于每个类别的概率得分,然后返回得分最高的类别的索引。
在实际使用中,我们可以根据需要调整和扩展这个基本实现。例如,可以添加平滑技术来处理未出现在训练集中的词汇,或者使用更复杂的特征表示来表示文档。
阅读全文