给我一串实现贝叶斯算法的代码
时间: 2024-03-26 19:38:35 浏览: 12
以下是一个简单的实现贝叶斯算法的 Python 代码:
```python
import numpy as np
class NaiveBayes:
def __init__(self):
self.classes = None
self.class_priors = None
self.feature_likelihoods = None
def fit(self, X, y):
self.classes = np.unique(y)
n_classes = len(self.classes)
n_features = X.shape[1]
# Calculate class priors
self.class_priors = np.zeros(n_classes)
for i, c in enumerate(self.classes):
self.class_priors[i] = np.sum(y == c) / float(len(y))
# Calculate feature likelihoods
self.feature_likelihoods = np.zeros((n_classes, n_features))
for i, c in enumerate(self.classes):
X_c = X[y == c]
self.feature_likelihoods[i, :] = np.mean(X_c, axis=0)
def predict(self, X):
y_pred = np.zeros(len(X))
for i, x in enumerate(X):
posteriors = []
for j, c in enumerate(self.classes):
# Calculate posterior probability for each class
posterior = self.class_priors[j] * np.prod(self.feature_likelihoods[j, :] ** x * (1 - self.feature_likelihoods[j, :]) ** (1 - x))
posteriors.append(posterior)
# Make prediction based on class with highest posterior probability
y_pred[i] = self.classes[np.argmax(posteriors)]
return y_pred
```
这个代码实现了基于朴素贝叶斯算法的分类器。其中 `fit` 方法用于训练模型,`predict` 方法用于预测新样本的分类。在训练过程中,先计算了每个类别的先验概率,然后计算了每个特征在每个类别中的条件概率。在预测过程中,对于每个新样本,分别计算其属于每个类别的后验概率,并选择后验概率最大的类别作为预测结果。