如何使用Python实现朴素贝叶斯分类器?
时间: 2024-03-28 19:31:52 浏览: 63
以下是使用Python实现朴素贝叶斯分类器的步骤:
1. 收集数据集并进行预处理,将数据集转换为特征向量的形式。
2. 计算每个类别的先验概率,即P(Ci)。
3. 对于每个特征,计算每个类别下该特征的条件概率,即P(Xi|Ci)。
4. 对于一个新的样本,计算其属于每个类别的后验概率,即P(Ci|X),并选择后验概率最大的类别作为该样本的分类结果。
以下是一个简单的Python实现示例:
```python
import numpy as np
class NaiveBayes:
def __init__(self):
self.prior_prob = None
self.cond_prob = None
def fit(self, X, y):
n_samples, n_features = X.shape
self.classes = np.unique(y)
n_classes = len(self.classes)
# 计算每个类别的先验概率
self.prior_prob = np.zeros(n_classes)
for i, c in enumerate(self.classes):
self.prior_prob[i] = np.sum(y == c) / n_samples
# 计算每个类别下每个特征的条件概率
self.cond_prob = np.zeros((n_classes, n_features))
for i, c in enumerate(self.classes):
X_c = X[y == c]
self.cond_prob[i] = (np.sum(X_c, axis=0) + 1) / (np.sum(X_c) + n_features)
def predict(self, X):
n_samples, n_features = X.shape
y_pred = np.zeros(n_samples)
for i in range(n_samples):
# 计算后验概率
posterior_prob = np.zeros(len(self.classes))
for j, c in enumerate(self.classes):
posterior_prob[j] = np.log(self.prior_prob[j]) + np.sum(np.log(self.cond_prob[j, :])) + np.sum(np.log(1 - self.cond_prob[j, :]))
y_pred[i] = self.classes[np.argmax(posterior_prob)]
return y_pred
```
阅读全文