朴素贝叶斯

朴素贝叶斯算法概述:

朴素贝叶斯(Naïve Bayes, NB)算法,是一种基于贝叶斯定理与特征条件独立假设的分类方法。朴素:特征条件独立;贝叶斯:基于贝叶斯定理。

贝叶斯定理

贝叶斯定理描述了在给定某些先验条件下,通过新的证据来更新对事件的信念的过程。它的数学表达式如下:

P(A|B)是在给定B条件下A的概率,即后验概率。
P(B|A)是在给定A条件下B的概率,即似然度。
P(A)是A的先验概率。
P(B)是B的先验概率,也称为归一化常量。

朴素贝叶斯:

朴素贝叶斯算法基于贝叶斯定理,但是做了一个“朴素”的假设,即假设每个特征都是相互独立的。对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y:

朴素贝叶斯算法原理:在朴素贝叶斯算法中,对于给定的输入 ( x ),我们计算每个可能的类别 ( ck ) 下的后验概率,并选择具有最大后验概率的类别作为输出。

 P(Y = ck |X = x) 是在给定输入 ( x ) 的情况下输出类别 ( ck ) 的后验概率。
 P(X = x |Y = ck) 是在给定输出类别 ( ck ) 的情况下输入 ( x ) 的概率,即似然度。
 P(Y = ck) 是输出类别 ( ck ) 的先验概率。
 P(X = x) 是输入 ( x ) 的先验概率,也称为归一化常量。

朴素贝叶斯分类模型为:

朴素贝叶斯算法的步骤如下:

准备数据集:收集并准备带有标签的训练数据。

计算类别的先验概率:计算每个类别的先验概率,即在没有任何信息的情况下,每个类别发生的概率。

计算每个特征在每个类别下的条件概率:对于每个特征,计算在每个类别下的条件概率。这里使用了贝叶斯定理。

预测新数据:对于新的未标记数据,通过计算其在每个类别下的概率,选择概率最大的类别作为预测结果。

算法实现:

加载并处理数据集(从csv文件中读取)

data = pd.read_csv(r'C:\Users\86187\Desktop\iris.csv')

# X是特征,y是标签
X = data[['Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width']]
y = data['Species']

# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

建立朴素贝叶斯模型:

# 初始化朴素贝叶斯分类器
nb_classifier = GaussianNB()

# 训练模型
nb_classifier.fit(X_train, y_train)

# 使用训练好的模型进行预测
y_pred = nb_classifier.predict(X_test)

验证模型是否可以使用:

# 评估模型准确率
accuracy = accuracy_score(y_test, y_pred)
print("模型准确率:", accuracy)

同时计算了每个类别的召回率以及查准率,最后输出混淆矩阵

# 计算每个类别的查准率和召回率
precision = precision_score(y_test, y_pred, average=None)
recall = recall_score(y_test, y_pred, average=None)

print("每个类别的查准率:", precision)
print("每个类别的召回率:", recall)

# 计算混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)

# 可视化混淆矩阵
plt.figure(figsize=(8, 6))
sns.heatmap(conf_matrix, annot=True, fmt="d", cmap="Blues", xticklabels=data['Species'].unique(), yticklabels=data['Species'].unique())
plt.xlabel('Predicted')
plt.ylabel('True')
plt.title('Confusion Matrix')
plt.show()

# 计算混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)

# 可视化混淆矩阵
plt.figure(figsize=(8, 6))
sns.heatmap(conf_matrix, annot=True, fmt="d", cmap="Blues", xticklabels=data['Species'].unique(), yticklabels=data['Species'].unique())
plt.xlabel('Predicted')
plt.ylabel('True')
plt.title('Confusion Matrix')
plt.show()

 

最后只实现了一个简单的贝叶斯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值