编程实现朴素贝叶斯分类器的训练与测试。
时间: 2024-05-26 11:16:16 浏览: 12
朴素贝叶斯分类器是一种基于贝叶斯定理和特征独立假设的分类器,常用于文本分类。下面给出一个简单的Python实现:
## 导入必要的库
import numpy as np
from collections import defaultdict
## 定义朴素贝叶斯分类器类
class NaiveBayesClassifier:
def __init__(self):
self.classes = None
self.priors = None
self.likelihoods = None
## 训练函数
def fit(self, X, y):
self.classes = np.unique(y) # 所有类别
num_classes = len(self.classes) # 类别数
num_features = X.shape[1] # 特征数
self.priors = np.zeros(num_classes) # 先验概率
self.likelihoods = np.zeros((num_classes, num_features)) # 条件概率
## 计算先验概率和条件概率
for i, c in enumerate(self.classes):
X_c = X[y == c]
self.priors[i] = X_c.shape[0] / X.shape[0]
self.likelihoods[i, :] = (X_c.sum(axis=0) + 1) / (np.sum(X_c) + num_features)
## 预测函数
def predict(self, X):
y_pred = []
for x in X:
posteriors = []
for i, c in enumerate(self.classes):
prior = np.log(self.priors[i])
likelihood = np.log(self.likelihoods[i, :])
posterior = np.sum(likelihood * x) + prior
posteriors.append(posterior)
y_pred.append(self.classes[np.argmax(posteriors)])
return np.array(y_pred)
## 示例数据
X = np.array([[1, 1, 0, 1],
[1, 0, 1, 1],
[0, 1, 0, 1],
[1, 1, 1, 0],
[0, 0, 1, 1],
[0, 1, 1, 0]])
y = np.array([1, 1, 1, 0, 0, 0])
## 训练、测试
clf = NaiveBayesClassifier()
clf.fit(X, y)
y_pred = clf.predict(X)
## 输出预测结果
print('真实标签:', y)
print('预测标签:', y_pred)
## 输出预测准确率
accuracy = np.mean(y_pred == y)
print('预测准确率:', accuracy)
在这个例子中,我们使用一个小数据集进行训练和测试。首先,我们导入必要的库,然后定义一个NaiveBayesClassifier类。该类包括fit和predict两个函数,用于训练和预测。在fit函数中,我们计算先验概率和条件概率;在predict函数中,我们计算后验概率,并选择具有最大后验概率的类别作为预测结果。最后,我们使用示例数据进行训练和测试,并输出预测结果和准确率。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)