机器学习之 贝叶斯算法 及朴素贝叶斯分类器的代码实现(给我点赞的都发财,谢谢)

贝叶斯算法简介

贝叶斯算法是一种基于概率论的统计学方法,广泛应用于机器学习领域。它基于贝叶斯定理,用于计算后验概率。贝叶斯定理可以表述为:

其中:

  • P(A∣B) 表示在事件 B 发生的情况下事件 A 发生的概率,称为后验概率。
  • P(B∣A) 表示在事件 A 发生的情况下事件 B 发生的概率,称为似然度。
  • P(A) 和 P(B) 分别是事件 A 和 B 的先验概率。

在机器学习中,贝叶斯算法通常用于分类任务,特别是文本分类和垃圾邮件过滤等领域。

朴素贝叶斯分类器

朴素贝叶斯分类器是一种简单的贝叶斯分类器,它假设特征之间相互独立。虽然这种假设在实际应用中很少成立,但朴素贝叶斯分类器仍然能够取得很好的效果。

朴素贝叶斯分类器的主要优点包括:

  • 计算效率高。
  • 需要较少的训练数据。
  • 对缺失数据不敏感。
  • 特征独立性假设简化了模型,使得训练过程更加高效。
准备数据

我们将使用 Iris 数据集来进行分类任务,数据如下:

实现代码

下面是使用 Python 和 scikit-learn 库实现朴素贝叶斯分类器的代码示例。

导入库
import pandas as pd
import matplotlib.pyplot as plt
定义一个混淆函数
# 定义一个绘制混淆矩阵的函数
def cm_plot(y, yp):
    from sklearn.metrics import confusion_matrix
    import matplotlib.pyplot as plt

    # 计算混淆矩阵
    cm = confusion_matrix(y, yp)

    # 使用 matshow 绘制混淆矩阵
    plt.matshow(cm, cmap=plt.cm.Blues)
    plt.colorbar()

    # 在每个格子里添加数值
    for x in range(len(cm)):
        for y in range(len(cm)):
            plt.annotate(cm[x, y], xy=(y, x), horizontalalignment='center',
                         verticalalignment='center')

    # 设置坐标轴标签
    plt.ylabel('True label')
    plt.xlabel('Predicted label')

    # 返回绘制好的混淆矩阵图像
    return plt
导入数据

读取iris.csv文件,第一行不设为列名,选择特征集和标签集,因为第一列数据为序列,所以不能作为特征集继续预测。

# 读取数据集
data = pd.read_csv('iris.csv', header=None)

# 选择特征列
x = data.iloc[:, 1:-1]

# 选择标签列
y = data.iloc[:, -1]
划分数据集和特征集

随机划分数据集和特征集,并设置测试集的占比为0.2,即训练集占比为0.8。随机种子设置为100,确保每一次运行代码时都能得到相同的数据分割结果。

# 划分训练集和测试集
from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = \
    train_test_split(x, y, test_size=0.2, random_state=100)
训练模型
# 创建并训练多项式朴素贝叶斯分类器
from sklearn.naive_bayes import MultinomialNB

classifier = MultinomialNB()
classifier.fit(x_train, y_train)
预测结果

分别对训练集和测试集继续预测

# 在训练集上进行预测
train_pred = classifier.predict(x_train)

# 在测试集上进行预测
test_pred = classifier.predict(x_test)
分类报告
# 计算并打印训练集上的分类报告
from sklearn import metrics

print(metrics.classification_report(y_train, train_pred))
# 绘制训练集上的混淆矩阵并打印
print(cm_plot(y_train, train_pred))

# 计算并打印测试集上的分类报告
print(metrics.classification_report(y_test, test_pred))
# 绘制测试集上的混淆矩阵并打印
print(cm_plot(y_test, test_pred))
plt.show()
输出结果

分类报告

混淆矩阵

总结

这个输出包含了两个分类报告和混淆矩阵,分别对应训练集和测试集的结果。这两个分类报告显示了模型在训练集和测试集上都取得了完美的性能。

  • 19
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值