python朴素贝叶斯代码
时间: 2023-10-14 16:29:36 浏览: 87
my_naive_bayes.zip
以下是一个简单的Python实现朴素贝叶斯分类器的代码示例:
```python
import pandas as pd
import numpy as np
class NaiveBayes:
def __init__(self):
self.prior = {}
self.conditional_prob = {}
self.classes = []
self.features = []
def fit(self, X_train, y_train):
# 计算每个类别的先验概率
n_samples = len(y_train)
self.classes, class_counts = np.unique(y_train, return_counts=True)
self.prior = dict(zip(self.classes, class_counts / n_samples))
# 计算每个特征在每个类别下的条件概率
self.features = list(X_train.columns)
for cls in self.classes:
cls_data = X_train[y_train == cls]
self.conditional_prob[cls] = {}
for feature in self.features:
feature_values, feature_counts = np.unique(cls_data[feature], return_counts=True)
self.conditional_prob[cls][feature] = dict(zip(feature_values, feature_counts / class_counts[cls]))
def predict(self, X_test):
# 对于每个测试样本,计算其属于每个类别的概率
preds = []
for _, row in X_test.iterrows():
probs = {}
for cls in self.classes:
# 计算后验概率
prob_cls = self.prior[cls]
for feature in self.features:
value = row[feature]
prob_cls *= self.conditional_prob[cls][feature].get(value, 0)
probs[cls] = prob_cls
# 选取概率最大的类别作为预测结果
preds.append(max(probs, key=probs.get))
return preds
```
该代码实现了一个朴素贝叶斯分类器,包括`fit`方法用于训练模型(计算先验概率和条件概率),以及`predict`方法用于对新数据进行分类。在构造函数中,我们初始化了一些实例变量,包括先验概率、条件概率、类别和特征。`fit`方法首先计算了每个类别的先验概率,然后计算了每个特征在每个类别下的条件概率。`predict`方法则对于每个测试样本,计算了其属于每个类别的概率,并选取概率最大的类别作为预测结果。整个过程中,我们使用了Pandas和NumPy库来处理数据和计算概率。
阅读全文