• 【机器学习】贝叶斯分类器


    贝叶斯分类器是一种概率模型,利用贝叶斯公式来解决分类问题。假设样本的特征向量服从一定的概率分布,我们就可以计算出该特征向量属于各个类的条件概率。分类结果是条件概率最大的分类结果。如果假设特征向量的每个分量彼此独立,则它是朴素贝叶斯分类器。如果假设特征向量服从多维正态分布,则它是正态贝叶斯分类器。

    一、原理:

    贝叶斯公式(Bayes' theorem)

    efbe022bcaf693c7f5e5eedd02240de2.png

    24949e4000b767a9ca7612fdfd154e6a.png

    贝叶斯决策

    1cc66fc6d901443132da49f949ff7212.png

    朴素贝叶斯分类器

    0cc06cc9e0f9548676b1c0199894522f.png

    朴素贝叶斯分类器特征向量为离散型随机变量

    f394e9e361d63cd198ab4df79a239cc9.png

    拉普拉斯平滑

    f836e5fd4584014560630605713cb498.png

    朴素贝叶斯分类器特征向量为连续型随机变量

    9dccb9e21d791dfbf3a5d64ab0f222aa.png

    ln函数的性质

    632da6b5beeb29306905cf8d657549a0.png

    朴素贝叶斯分类器特征向量为连续型随机变量,对于二分类问题,正态贝叶斯分类器

    abb8380a3f8e324f10c50acd203a82b0.png

    fdb35b50ba535199957f00d4c925ab00.png

    协方差朴素贝叶斯

    a03c4e1f2f2e46f73b525dd39fdf1568.png

    协方差朴素贝叶斯的训练过程

    9311a7b6c79f5aafe24921ee68d666d9.png

    协方差朴素贝叶斯的预测算法

    9765d8bb0d360d243d76f63fc57549fc.png

    二、示例程序:

    Scikit-learn中提供了多种朴素贝叶斯分类器,其中包括高斯朴素贝叶斯(Gaussian Naive Bayes)分类器。然而,对于鸢尾花数据集,由于其特征是连续型的,因此通常使用的是高斯朴素贝叶斯分类器。

    60ce9e0d560e236ab64009b18312dc00.png

    以下是在Scikit-learn中使用高斯朴素贝叶斯分类器对鸢尾花数据集进行分类的示例:

    1. # 导入必要的模块
    2. import numpy as np # 导入NumPy库,并将其命名为np,这是一个用于科学计算的库,提供了多维数组和数学函数的支持
    3. import matplotlib.pyplot as plt # 导入Matplotlib库的pyplot模块,并将其命名为plt,用于创建静态、交互式和动画图表的绘图库。
    4. from sklearn import datasets # 从Scikit-learn库中导入datasets模块,该模块包含了一些标准的数据集,包括机器学习领域常用的一些数据集
    5. from sklearn.naive_bayes import GaussianNB # 从Scikit-learn库中导入朴素贝叶斯分类器的高斯朴素贝叶斯模型。
    6. import matplotlib # 导入Matplotlib库,这是一个用于绘制图表的广泛使用的库。
    7. %matplotlib inline # 一个Jupyter Notebook魔术命令,用于在Notebook中嵌入Matplotlib图形,并在代码执行后直接在Notebook中显示图形
    8. # 定义生成测试样本点的函数
    9. def make_meshgrid(x, y, h=.02):
    10.   # 计算x、y的最小值和最大值
    11.   x_min, x_max = x.min() - 1, x.max() + 1
    12.   y_min, y_max = y.min() - 1, y.max() + 1
    13.   # 生成均匀网格
    14.   xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
    15.              np.arange(y_min, y_max, h))
    16.   # 返回网格坐标
    17.   return xx, yy
    18. # 定义预测测试样本并显示的函数
    19. def plot_test_results(ax, clf, xx, yy, **params):
    20.   # 对测试样本进行预测 xx.ravel() 和 yy.ravel() 用于将二维的坐标网格
    21.   # 矩阵展平为一维数组。这是因为 clf.predict() 方法接受一维数组形式的输入
    22.   Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
    23.   # 将预测结果转换为网格图像
    24.   Z = Z.reshape(xx.shape)#返回坐标网格 xx 的形状,即一个包含行数和列数的元组。
    25.   # 在网格图像上绘制等高线
    26.   ax.contourf(xx, yy, Z, **params)
    27. # 载入iris数据集
    28. iris = datasets.load_iris()
    29. # 只使用前面两个特征 即鸢尾花数据集的萼片长度和萼片宽度。
    30. X = iris.data[:, :2]#选择所有行(即所有样本)和前两列的数据
    31. # 样本标签值
    32. y = iris.target
    33. # 创建并训练正态朴素贝叶斯分类器
    34. clf = GaussianNB()
    35. clf.fit(X,y)
    36. # 图形标题
    37. title = ('GaussianBayesClassifier')
    38. # 创建图形 fig 是整个图形对象,而 ax 是包含的子图对象 子图的大小为 (5, 5)
    39. fig, ax = plt.subplots(figsize = (5, 5))
    40. # 调整子图布局   0.4 表示子图之间的宽度/高度间距为整个子图宽度/高度的 0.4 倍
    41. plt.subplots_adjust(wspace=0.4, hspace=0.4)
    42. # 获取第0、1个特征的值
    43. X0, X1 = X[:, 0], X[:, 1]
    44. # 生成测试样本点
    45. xx, yy = make_meshgrid(X0, X1)
    46. # 显示测试样本的分类结果
    47. plot_test_results(ax, clf, xx, yy, cmap=plt.cm.coolwarm, alpha=0.8)
    48. #绘制散点图 显示训练样本
    49. # X0 和 X1 分别是训练样本的前两个特征变量
    50. # c=y 指定了散点的颜色,使用了目标标签 y 中的类别信息。不同的类别用不同的颜色表示。
    51. # cmap=plt.cm.coolwarm 指定了颜色映射,用于将类别映射到具体的颜色。
    52. # s=20 设置了散点的大小为 20。
    53. #edgecolors='k' 设置了散点的边缘颜色为黑色 ('k' 表示黑色)。
    54. ax.scatter(X0, X1, c=y, cmap=plt.cm.coolwarm, s=20, edgecolors='k')
    55. # 设置图形属性
    56. ax.set_xlim(xx.min(), xx.max())
    57. ax.set_ylim(yy.min(), yy.max())
    58. ax.set_xlabel('x1')
    59. ax.set_ylabel('x2')
    60. ax.set_xticks(())# 将 x 轴的刻度标签设为空
    61. ax.set_yticks(())
    62. ax.set_title(title)
    63. # 显示图形
    64. plt.show()

    707ec4e195ee2b7f927269ce55ea872a.png

    三、贝叶斯分类器的应用

    f62a2b8759ee7dd01213b33843e77fc9.png

    参考网址:
    https://programmer.group/principle-of-machine-learning-bayesian-classifier-and-its-sklearn-implementation.html Principle of machine learning Bayesian classifier and its sklearn implementation --- 机器学习贝叶斯分类器原理及其sklearn实现 (programmer.group)

    https://zhuanlan.zhihu.com/p/25462307 OpenCV机器学习——朴素贝叶斯NBC - 知乎 (zhihu.com)

    https://blog.csdn.net/qinzhongyuan/article/details/106434854 鸢尾花(Iris)数据集_iris数据集-CSDN博客

    https://zhuanlan.zhihu.com/p/480326305 数据集 |鸢尾花数据集 - 知乎 (zhihu.com)

    The End

  • 相关阅读:
    电脑重装系统后安全中心有个黄色感叹号如何处理
    Linux操作
    Golang协程详解
    8255 boot介绍及bring up实战分享
    Jupyter notebook在超算平台上使用的详细教程
    做机器视觉工程师,其实挺没意思的
    使用Idea新建Play项目sbt构建失败,提示scala-xml依赖冲突
    【附源码】计算机毕业设计JAVA技术的游戏交易平台
    Java在物联网中的重要性
    【Python】三目运算符(三元运算符)
  • 原文地址:https://blog.csdn.net/cxyhjl/article/details/134522465