用python代码实现朴素贝叶斯算法
时间: 2023-08-15 09:33:21 浏览: 55
好的,下面是 Python 实现的朴素贝叶斯算法示例代码:
```python
import numpy as np
class NaiveBayes:
def __init__(self):
self.classes = None
self.means = None
self.std_devs = None
def fit(self, X, y):
self.classes = np.unique(y)
n_classes = len(self.classes)
n_features = X.shape[1]
self.means = np.zeros((n_classes, n_features))
self.std_devs = np.zeros((n_classes, n_features))
for i, c in enumerate(self.classes):
X_c = X[y == c]
self.means[i, :] = X_c.mean(axis=0)
self.std_devs[i, :] = X_c.std(axis=0)
def predict(self, X):
y_pred = np.zeros(X.shape[0])
for i, x in enumerate(X):
posterior_probs = []
for j, c in enumerate(self.classes):
prior_prob = np.log(self.prior_prob(c))
posterior_prob = np.sum(np.log(self.likelihood(x, j)))
posterior_probs.append(prior_prob + posterior_prob)
y_pred[i] = self.classes[np.argmax(posterior_probs)]
return y_pred
def prior_prob(self, class_value):
return np.mean(self.y_train == class_value)
def likelihood(self, x, class_index):
mean = self.means[class_index]
std_dev = self.std_devs[class_index]
numerator = np.exp(-((x - mean) ** 2) / (2 * (std_dev ** 2)))
denominator = np.sqrt(2 * np.pi) * std_dev
return numerator / denominator
```
这里实现了一个简单的朴素贝叶斯分类器,包括拟合和预测方法。其中,拟合方法用于计算训练数据的均值和标准差,预测方法用于预测新数据的类别。在预测时,首先计算每个类别的先验概率和样本的似然概率,然后将它们相加得到后验概率最大的类别作为预测结果。