写一段朴素贝叶斯算法的代码
时间: 2023-09-26 13:06:30 浏览: 103
### 回答1:
```python
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer
# 初始化 CountVectorizer
vectorizer = CountVectorizer()
# 初始化朴素贝叶斯分类器
clf = MultinomialNB()
# 训练数据
train_data = ["我 喜欢 数据 科学", "我 不喜欢 编程", "数据 科学 很 有趣"]
train_data = vectorizer.fit_transform(train_data)
clf.fit(train_data, ["喜欢", "喜欢", "喜欢"])
# 测试数据
test_data = ["我 喜欢 编程"]
test_data = vectorizer.transform(test_data)
# 预测
prediction = clf.predict(test_data)
print(prediction) # 输出 ["喜欢"]
```
这段代码使用了 sklearn 的 MultinomialNB 实现了朴素贝叶斯算法,其中 CountVectorizer 用于将文本转换为特征向量,fit_transform 函数用于训练数据,transform 函数用于测试数据。预测结果是喜欢。
### 回答2:
朴素贝叶斯算法是一种常用的分类算法,其代码如下:
```python
# 导入所需要的库
import numpy as np
# 定义朴素贝叶斯分类器类
class NaiveBayesClassifier:
def __init__(self):
self.classes = None # 类别
self.class_priors = None # 类别的先验概率
self.feature_probs = None # 特征在每个类别下的条件概率
# 计算先验概率
def calculate_class_priors(self, y):
classes, counts = np.unique(y, return_counts=True)
n_samples = len(y)
self.classes = classes
self.class_priors = counts / n_samples
# 计算条件概率
def calculate_feature_probs(self, X, y):
n_features = X.shape[1]
self.feature_probs = {}
for c in self.classes:
X_c = X[y==c]
feature_probs_c = {}
for feature in range(n_features):
values, counts = np.unique(X_c[:, feature], return_counts=True)
feature_probs_c[feature] = counts / len(X_c)
self.feature_probs[c] = feature_probs_c
# 训练模型
def fit(self, X, y):
self.calculate_class_priors(y)
self.calculate_feature_probs(X, y)
# 预测样本的类别
def predict(self, X):
y_pred = []
for x in X:
class_probs = []
for c in self.classes:
prior = np.log(self.class_priors[c])
feature_probs_c = self.feature_probs[c]
conditional_probs = []
for feature, value in enumerate(x):
conditional_prob = feature_probs_c.get(feature, [0])[0]
conditional_probs.append(conditional_prob)
class_probs.append(prior + np.log(conditional_probs).sum())
y_pred.append(self.classes[np.argmax(class_probs)])
return y_pred
```
上述代码是一个基本实现的朴素贝叶斯算法,其中包括了计算先验概率、条件概率以及对样本进行分类的相关方法。通过调用`fit()`方法进行模型训练,调用`predict()`方法进行预测,利用该算法可以实现对给定样本进行分类的功能。
### 回答3:
朴素贝叶斯算法是一种常用的机器学习算法,用于分类和文本分类等任务。下面是一个简单的朴素贝叶斯算法的示例代码:
```python
import numpy as np
class NaiveBayes:
def __init__(self):
self.classes = None
self.class_prior = None
self.word_count = None
def fit(self, X, y):
self.classes = np.unique(y)
num_classes = len(self.classes)
self.class_prior = np.zeros(num_classes)
self.word_count = np.ones((num_classes, X.shape[1]))
for i, c in enumerate(self.classes):
X_c = X[y == c]
self.class_prior[i] = len(X_c) / len(X)
self.word_count[i] += np.sum(X_c, axis=0)
def predict(self, X):
predictions = []
for x in X:
class_scores = np.log(self.class_prior)
for i, word in enumerate(x):
if word != 0:
class_scores += np.log(self.word_count[:, i] / np.sum(self.word_count, axis=1))
predicted_class = np.argmax(class_scores)
predictions.append(predicted_class)
return predictions
```
这段代码实现了朴素贝叶斯算法的主要逻辑。其中,`fit`方法用于训练模型,接受输入数据`X`和对应的标签`y`。在训练过程中,首先计算各个类别的先验概率,然后统计每个类别在各个特征上的词频。`predict`方法用于预测新的样本,接受输入数据`X`,返回预测的标签。在预测过程中,根据贝叶斯定理计算每个类别的后验概率,选取概率最大的类别作为预测结果。