请写出朴素贝叶斯算法
时间: 2023-11-26 08:47:05 浏览: 38
朴素贝叶斯算法是一种基于贝叶斯定理和特征条件独立假设的分类方法。它通过特征计算分类的概率,选取概率大的情况,是基于概率论的一种机器学习分类(监督学习)方法。具体步骤如下:
1. 收集数据:收集一定量的训练数据,这些数据需要包含分类信息和特征信息。
2. 处理数据:对于连续型数据,需要将其离散化;对于缺失数据,需要进行处理。
3. 计算概率:计算每个特征在每个分类下的条件概率,以及每个分类的先验概率。
4. 计算分类概率:根据贝叶斯定理,计算每个分类下给定特征的条件概率。
5. 选择分类:选择概率最大的分类作为预测结果。
下面是一个简单的朴素贝叶斯算法的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)
self.class_priors = np.zeros(len(self.classes))
self.feature_probs = []
for i, c in enumerate(self.classes):
X_c = X[y == c]
self.class_priors[i] = len(X_c) / len(X)
probs = []
for j in range(X.shape[1]):
vals, counts = np.unique(X_c[:, j], return_counts=True)
probs.append(dict(zip(vals, counts / len(X_c))))
self.feature_probs.append(probs)
def predict(self, X):
y_pred = []
for x in X:
probs = []
for i, c in enumerate(self.classes):
prob = self.class_priors[i]
for j in range(len(x)):
if x[j] in self.feature_probs[i][j]:
prob *= self.feature_probs[i][j][x[j]]
else:
prob = 0
break
probs.append(prob)
y_pred.append(self.classes[np.argmax(probs)])
return y_pred
```