编写代码设计朴素贝叶斯算法
时间: 2023-10-27 07:12:25 浏览: 42
感谢您的提问。下面是一个简单的 Python 代码实现朴素贝叶斯算法的示例:
```
import numpy as np
class NaiveBayes:
def __init__(self):
self.priors = {}
self.posteriors = {}
self.classes = []
def fit(self, X, y):
"""
训练朴素贝叶斯分类器
参数:
X: ndarray,训练数据集,每行代表一个样本,每列代表一个特征
y: ndarray,标签集,每个元素代表一个数据样本对应的分类标签
"""
n_samples, n_features = X.shape
self.classes = np.unique(y)
# 计算每个类别的先验概率
for c in self.classes:
self.priors[c] = np.sum(y == c) / n_samples
# 计算每个类别下每个特征的条件概率
for c in self.classes:
X_c = X[y==c]
self.posteriors[c] = {}
for feature in range(n_features):
values, counts = np.unique(X_c[:,feature], return_counts=True)
self.posteriors[c][feature] = dict(zip(values, counts / np.sum(counts)))
def predict(self, X):
"""
对新数据进行分类
参数:
X: ndarray,待分类的数据样本集
Returns:
ndarray,预测结果,每个元素代表对一个样本的分类结果
"""
n_samples, n_features = X.shape
predictions = []
for i in range(n_samples):
probs = {}
for c in self.classes:
# 计算每个类别下所有特征的条件概率的乘积
likelihood = 1
for feature in range(n_features):
if X[i, feature] in self.posteriors[c][feature]:
likelihood *= self.posteriors[c][feature][X[i, feature]]
# 计算该样本在当前类别下的后验概率
probs[c] = self.priors[c] * likelihood
# 选择后验概率最大的类别作为分类结果
prediction = max(probs, key=probs.get)
predictions.append(prediction)
return predictions
```
这个代码实现了一个朴素贝叶斯分类器。其中 `fit` 方法用于训练分类器,输入参数 `X` 是训练集数据样本,`y` 是标签集;`predict` 方法用于对新数据进行分类,输入参数 `X` 是待分类的数据样本集。在 `fit` 方法中,分类器会计算每个类别的先验概率以及每个类别下每个特征的条件概率;在 `predict` 方法中,分类器会对每个待分类样本计算在各个类别下的后验概率,并选择后验概率最大的类别作为分类结果。
希望这个例子可以帮助您更好地理解朴素贝叶斯算法的实现方式。