朴素贝叶斯算法的Python实现
时间: 2023-11-05 19:11:22 浏览: 25
朴素贝叶斯算法是一种基于贝叶斯定理的分类算法,常用于文本分类、垃圾邮件过滤等任务。下面是Python中实现朴素贝叶斯算法的示例代码:
```python
import numpy as np
class NaiveBayes:
def __init__(self):
self.classes = None
self.class_priors = None
self.feature_probs = None
def fit(self, X, y):
self.classes = np.unique(y)
n_samples, n_features = X.shape
n_classes = len(self.classes)
# 计算每个类别的先验概率
self.class_priors = np.zeros(n_classes)
for i, c in enumerate(self.classes):
self.class_priors[i] = np.sum(y == c) / float(n_samples)
# 计算每个特征在每个类别下的条件概率
self.feature_probs = np.zeros((n_classes, n_features))
for i, c in enumerate(self.classes):
X_c = X[y == c]
self.feature_probs[i, :] = (X_c.sum(axis=0) + 1) / (float(X_c.shape[0]) + n_features)
def predict(self, X):
y_pred = []
for x in X:
probs = []
for i, c in enumerate(self.classes):
prior = np.log(self.class_priors[i])
likelihood = np.sum(np.log(self.feature_probs[i, :]) * x)
probs.append(prior + likelihood)
y_pred.append(self.classes[np.argmax(probs)])
return np.array(y_pred)
```
在上述代码中,`fit`方法用于训练模型,其中`X`和`y`分别为训练集的特征和标签。`predict`方法用于对新样本进行预测,其中`X`为测试集的特征。具体实现过程中,我们首先计算每个类别的先验概率,并计算每个特征在每个类别下的条件概率,然后对于每个新样本,我们计算该样本属于每个类别的概率,选择概率最大的类别作为预测结果。
需要注意的是,在计算条件概率时,我们为了避免出现0概率,使用了拉普拉斯平滑。