python实现贝叶斯算法
时间: 2023-07-29 08:12:26 浏览: 94
贝叶斯算法是一种常用于分类问题的机器学习算法。以下是用 Python 实现的基本步骤:
1. 准备数据集
首先,我们需要准备一个数据集,并将其分为训练集和测试集。数据集应包含已分类的样本。
2. 计算先验概率
先验概率是每个类别出现的概率。我们可以通过计算训练集中每个类别的样本数量除以总样本数来计算先验概率。
3. 计算条件概率
条件概率是指在给定特征的情况下,某个类别出现的概率。我们可以通过计算每个特征在每个类别中出现的次数除以该类别的样本总数来计算条件概率。
4. 计算后验概率
后验概率是指在给定特征的情况下,某个类别出现的概率。我们可以使用贝叶斯公式来计算后验概率。
5. 预测分类
使用测试集中的样本特征,我们可以计算其在每个类别中的后验概率,并选择具有最高后验概率的类别作为预测分类。
下面是一个简单的 Python 实现:
```python
class NaiveBayes:
def __init__(self):
self.classes = None
self.priors = None
self.likelihoods = None
def fit(self, X, y):
self.classes = np.unique(y)
self.priors = np.zeros(len(self.classes))
self.likelihoods = []
for i, c in enumerate(self.classes):
X_c = X[y == c]
self.priors[i] = len(X_c) / len(X)
self.likelihoods.append({})
for j in range(X.shape[1]):
self.likelihoods[i][j] = {}
for val in np.unique(X[:, j]):
self.likelihoods[i][j][val] = \
len(X_c[X_c[:, j] == val]) / len(X_c)
def predict(self, X):
posteriors = []
for i, c in enumerate(self.classes):
prior = np.log(self.priors[i])
posterior = np.sum(np.log(self.likelihoods[i][j][X[j]]) for j in range(X.shape[1])) + prior
posteriors.append(posterior)
return self.classes[np.argmax(posteriors)]
```
这是一个简单的朴素贝叶斯分类器实现。`fit` 方法用于拟合训练数据,而 `predict` 方法用于预测测试数据的分类。
阅读全文