给我一段贝叶斯算法的代码
时间: 2024-05-11 09:14:36 浏览: 10
以下是一个简单的贝叶斯算法的Python代码:
```python
import numpy as np
class NaiveBayes:
def __init__(self):
self.classes = None
self.class_probs = None
self.mean = None
self.variance = None
def fit(self, X, y):
self.classes = np.unique(y)
n_classes = len(self.classes)
n_features = X.shape[1]
# 计算每个类别的先验概率
self.class_probs = np.zeros(n_classes)
for i in range(n_classes):
self.class_probs[i] = np.sum(y == self.classes[i]) / len(y)
# 计算每个特征在每个类别下的均值和方差
self.mean = np.zeros((n_classes, n_features))
self.variance = np.zeros((n_classes, n_features))
for i in range(n_classes):
X_ci = X[y == self.classes[i]]
self.mean[i] = np.mean(X_ci, axis=0)
self.variance[i] = np.var(X_ci, axis=0)
def predict(self, X):
n_samples = X.shape[0]
y_pred = np.zeros(n_samples)
for i in range(n_samples):
posteriors = []
for j in range(len(self.classes)):
prior = np.log(self.class_probs[j])
likelihood = np.sum(np.log(self.normal_pdf(X[i], self.mean[j], self.variance[j])))
posterior = prior + likelihood
posteriors.append(posterior)
y_pred[i] = self.classes[np.argmax(posteriors)]
return y_pred
def normal_pdf(self, x, mean, var):
exponent = np.exp(-((x - mean)**2 / (2 * var)))
return (1 / np.sqrt(2 * np.pi * var)) * exponent
```
这个类实现了基本的朴素贝叶斯分类器,支持高斯分布的连续特征。`fit()`方法使用训练数据拟合模型,`predict()`方法使用已拟合的模型对新样本进行分类。