实现朴素贝叶斯分类算法代码
时间: 2023-09-19 20:07:31 浏览: 100
手工实现KNN和朴素贝叶斯算法对鸢尾花数据进行自动分类 完整代码+数据 可直接运行
5星 · 资源好评率100%
好的,下面是一个简单的朴素贝叶斯分类算法的 Python 代码:
```python
import math
class NaiveBayes:
def __init__(self):
self.classes = {}
self.word_probs = {}
def train(self, data):
# 计算每个类别的出现次数
for d in data:
c = d[1]
if c not in self.classes:
self.classes[c] = 0
self.classes[c] += 1
# 统计每个单词在每个类别中出现的次数
counts = {}
for d in data:
c, text = d
if c not in counts:
counts[c] = {}
for word in text.split():
if word not in counts[c]:
counts[c][word] = 0
counts[c][word] += 1
# 计算每个单词在每个类别中出现的概率
for c in counts:
self.word_probs[c] = {}
total_words = sum(counts[c].values())
for word in counts[c]:
self.word_probs[c][word] = math.log(counts[c][word] / total_words)
def classify(self, text):
# 计算每个类别的概率
probs = {}
for c in self.classes:
probs[c] = math.log(self.classes[c] / sum(self.classes.values()))
# 计算每个单词在该类别中出现的概率
for word in text.split():
if word in self.word_probs[c]:
probs[c] += self.word_probs[c][word]
# 返回概率最大的类别
return max(probs, key=probs.get)
```
这个代码实现了一个简单的朴素贝叶斯分类器,它可以用于文本分类任务。`train()` 方法用于训练模型,接受一个列表,列表中的每个元素是一个元组,元组的第一个元素是文本内容,第二个元素是该文本所属的类别。`classify()` 方法用于对新的文本进行分类,接受一个字符串作为输入,返回一个字符串,表示该文本所属的类别。
阅读全文