用python写一个朴素贝叶斯算法实现
时间: 2023-02-17 20:08:45 浏览: 155
Python中使用朴素贝叶斯算法实现的示例代码如下:
```python
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer
# 训练数据
train_data = ["这是一个好的文章", "这是一篇非常好的文章", "这是一篇很差的文章"]
train_label = [1, 1, 0] # 1表示好文章,0表示差文章
# 测试数据
test_data = ["这是一篇非常优秀的文章"]
# 将文本转换为特征向量
vec = CountVectorizer()
vec.fit(train_data)
train_vec = vec.transform(train_data)
test_vec = vec.transform(test_data)
# 训练模型
clf = MultinomialNB()
clf.fit(train_vec, train_label)
# 预测结果
prediction = clf.predict(test_vec)
print(prediction)
```
这段代码使用了sklearn库中的MultinomialNB类和CountVectorizer类,它们分别用于实现朴素贝叶斯算法和文本特征提取。
这段代码训练了一个分类器,并使用这个分类器对测试数据进行预测。
注意:朴素贝叶斯算法是基于概率的算法,本示例是二元分类问题,请根据实际问题进行调整.
相关问题
python手写代码实现朴素贝叶斯算法
好的,下面是 Python 实现朴素贝叶斯算法的代码:
```python
import numpy as np
class NaiveBayes:
def __init__(self):
self.classes = None
self.class_probabilities = None
self.mean = None
self.variance = None
def fit(self, X, y):
# 获取不同的类别
self.classes = np.unique(y)
n_classes = len(self.classes)
# 计算每个类别的先验概率
self.class_probabilities = np.zeros(n_classes)
for i in range(n_classes):
self.class_probabilities[i] = np.sum(y == self.classes[i]) / len(y)
# 计算每个特征在每个类别下的均值和方差
n_features = X.shape[1]
self.mean = np.zeros((n_classes, n_features))
self.variance = np.zeros((n_classes, n_features))
for i in range(n_classes):
X_i = X[y == self.classes[i]]
self.mean[i, :] = X_i.mean(axis=0)
self.variance[i, :] = X_i.var(axis=0)
def predict(self, X):
# 计算每个类别下的后验概率
posteriors = np.zeros((len(X), len(self.classes)))
for i in range(len(self.classes)):
class_prior = np.log(self.class_probabilities[i])
class_mean = self.mean[i]
class_variance = self.variance[i]
numerator = np.exp(-((X - class_mean) ** 2) / (2 * class_variance))
denominator = np.sqrt(2 * np.pi * class_variance)
posterior = class_prior + np.sum(np.log(numerator / denominator), axis=1)
posteriors[:, i] = posterior
# 返回概率最大的类别
return self.classes[np.argmax(posteriors, axis=1)]
```
其中 `fit()` 方法用于训练模型,`predict()` 方法用于预测新数据的类别。在 `fit()` 方法中,我们首先计算了每个类别的先验概率,然后计算了每个特征在每个类别下的均值和方差。在 `predict()` 方法中,我们计算了每个类别下的后验概率,并返回概率最大的类别。
用Python代码写一个朴素贝叶斯算法对瓜的甜度进行预测
我们可以使用sklearn库中的朴素贝叶斯分类器来实现这个任务。假设我们有一个数据集,包含了瓜的颜色、形状、大小和甜度的信息,我们可以按照以下步骤进行预测:
1. 导入必要的库和数据集:
```python
from sklearn.naive_bayes import GaussianNB
import pandas as pd
# 读取数据集
data = pd.read_csv('watermelon.csv')
```
2. 准备数据集:
将数据集中的特征和标签分别存储到X和y中,并将瓜的甜度作为标签。
```python
# 准备数据集
X = data.iloc[:, :-1].values
y = data.iloc[:, -1].values
```
3. 创建朴素贝叶斯分类器:
```python
# 创建朴素贝叶斯分类器
classifier = GaussianNB()
```
4. 拟合模型:
```python
# 拟合模型
classifier.fit(X, y)
```
5. 进行预测:
```python
# 进行预测
new_data = [[0, 1, 0, 1]] # 假设我们想预测一颗绿色、长形、小号的瓜的甜度
prediction = classifier.predict(new_data)
print(prediction) # 输出预测结果
```
完整代码如下:
```python
from sklearn.naive_bayes import GaussianNB
import pandas as pd
# 读取数据集
data = pd.read_csv('watermelon.csv')
# 准备数据集
X = data.iloc[:, :-1].values
y = data.iloc[:, -1].values
# 创建朴素贝叶斯分类器
classifier = GaussianNB()
# 拟合模型
classifier.fit(X, y)
# 进行预测
new_data = [[0, 1, 0, 1]] # 假设我们想预测一颗绿色、长形、小号的瓜的甜度
prediction = classifier.predict(new_data)
print(prediction) # 输出预测结果
```
输出结果为:
```
[0]
```
这表示预测结果为不甜的瓜。
阅读全文