朴素贝叶斯分类器实例及代码
时间: 2024-03-24 10:41:11 浏览: 58
以下是朴素贝叶斯分类器的一个简单实例及代码:
假设我们有一个数据集,其中包含以下数据:
| 文本 | 分类 |
| ---------------------------------------- | ---- |
| Chinese Beijing Chinese | 中国 |
| Chinese Chinese Shanghai | 中国 |
| Chinese Macao | 中国 |
| Tokyo Japan Chinese | 日本 |
我们要使用朴素贝叶斯分类器来对新的文本进行分类。
首先,我们需要对数据进行预处理,将文本转换为单词列表:
```
data = [
['Chinese', 'Beijing', 'Chinese', '中国'],
['Chinese', 'Chinese', 'Shanghai', '中国'],
['Chinese', 'Macao', '中国'],
['Tokyo', 'Japan', 'Chinese', '日本']
]
```
然后,我们需要计算出每个类别及每个单词在每个类别中出现的概率。这里我们使用 Laplace 平滑来避免概率为 0 的情况:
```
class_prob = {}
word_prob = {}
# 计算类别概率
for row in data:
cls = row[-1]
class_prob[cls] = class_prob.get(cls, 0) + 1
total = len(data)
for cls, count in class_prob.items():
class_prob[cls] = (count + 1) / (total + len(class_prob))
# 计算单词概率
for row in data:
cls = row[-1]
for word in row[:-1]:
word_prob.setdefault(word, {})
word_prob[word][cls] = word_prob[word].get(cls, 0) + 1
for word, cls_prob in word_prob.items():
total = sum(cls_prob.values())
for cls, count in cls_prob.items():
cls_prob[cls] = (count + 1) / (total + len(word_prob))
```
现在我们可以使用这些概率来对新的文本进行分类。假设我们要对以下文本进行分类:
```
text = 'Chinese Chinese Chinese Tokyo Japan'
```
我们需要计算出该文本属于每个类别的概率,然后选择概率最大的类别作为分类结果:
```
import math
tokens = text.split()
scores = {}
for cls, cls_prob in class_prob.items():
scores[cls] = math.log(cls_prob)
for word in tokens:
word_cls_prob = word_prob.get(word, {}).get(cls, 1e-10)
scores[cls] += math.log(word_cls_prob)
result = max(scores, key=scores.get)
print(result)
```
以上就是一个简单的朴素贝叶斯分类器实例及代码。注意,这只是一个简单的示例,实际应用中还需要进行更多的优化和调整。
阅读全文