朴素贝叶斯分类器python
时间: 2023-06-21 09:13:02 浏览: 88
以下是一个简单的朴素贝叶斯分类器的Python实现:
```python
import numpy as np
class NaiveBayes:
def fit(self, X, y):
self.classes = np.unique(y)
self.num_classes = len(self.classes)
# 计算每个类别的先验概率
self.priors = np.zeros(self.num_classes)
for i in range(self.num_classes):
self.priors[i] = np.sum(y == self.classes[i]) / float(len(y))
# 计算每个特征在每个类别下的条件概率
self.means = np.zeros((self.num_classes, X.shape[1]))
self.stds = np.zeros((self.num_classes, X.shape[1]))
for i in range(self.num_classes):
X_class = X[y == self.classes[i]]
self.means[i,:] = X_class.mean(axis=0)
self.stds[i,:] = X_class.std(axis=0)
def predict(self, X):
posteriors = np.zeros((X.shape[0], self.num_classes))
for i in range(self.num_classes):
prior = np.log(self.priors[i])
posterior = np.sum(np.log(self.normal_pdf(X, self.means[i,:], self.stds[i,:])), axis=1)
posteriors[:,i] = posterior + prior
return self.classes[np.argmax(posteriors, axis=1)]
def normal_pdf(self, X, mean, std):
var = std ** 2
denom = (2 * np.pi * var)**.5
num = np.exp(-(X - mean)**2 / (2 * var))
return num / denom
```
这个朴素贝叶斯分类器实现了`fit()`和`predict()`方法。`fit()`方法计算每个类别的先验概率和每个特征在每个类别下的条件概率。`predict()`方法使用贝叶斯公式计算每个类别的后验概率,并返回概率最大的类别。
这个朴素贝叶斯分类器假设所有特征都是独立的,因此称为“朴素”的。这种假设在实际情况中可能不成立,但是这个分类器仍然可以产生良好的结果。
阅读全文