python 写一段贝叶斯算法?
时间: 2023-10-18 18:15:07 浏览: 28
以下是一个简单的贝叶斯分类器的Python实现:
```python
import math
class NaiveBayes:
def __init__(self):
self.classes = []
self.class_probs = {}
self.word_counts = {}
self.word_probs = {}
def train(self, training_data):
# 计算类别出现的次数
class_counts = {}
for data in training_data:
if data[1] not in class_counts:
class_counts[data[1]] = 0
class_counts[data[1]] += 1
# 计算每个类别的概率
total_count = len(training_data)
for c in class_counts:
self.classes.append(c)
self.class_probs[c] = class_counts[c] / total_count
# 计算每个单词在每个类别中出现的次数
for data in training_data:
words = data[0].split()
for word in words:
if word not in self.word_counts:
self.word_counts[word] = {}
if data[1] not in self.word_counts[word]:
self.word_counts[word][data[1]] = 0
self.word_counts[word][data[1]] += 1
# 计算每个单词在每个类别中出现的概率
for word in self.word_counts:
self.word_probs[word] = {}
for c in self.classes:
if c not in self.word_counts[word]:
self.word_counts[word][c] = 0
self.word_probs[word][c] = self.word_counts[word][c] / class_counts[c]
def classify(self, data):
words = data.split()
max_prob = -1
max_class = ''
for c in self.classes:
prob = math.log(self.class_probs[c])
for word in words:
if word in self.word_probs:
prob += math.log(self.word_probs[word][c])
if prob > max_prob:
max_prob = prob
max_class = c
return max_class
```
该类包含三个主要方法:`train()`用于训练模型,`classify()`用于分类,`__init__()`用于初始化模型的内部数据结构。
在训练阶段,我们首先计算类别的出现次数,然后计算每个类别的概率。接下来,我们计算每个单词在每个类别中的出现次数,然后计算每个单词在每个类别中的概率。
在分类阶段,我们首先将输入数据拆分成单词,然后计算每个类别的概率。对于每个单词,我们使用训练阶段计算的单词概率来计算条件概率,并将其与类别概率相乘。最后,我们选择具有最高概率的类别作为分类结果。