贝叶斯分类器是一种概率模型,利用贝叶斯公式来解决分类问题。假设样本的特征向量服从一定的概率分布,我们就可以计算出该特征向量属于各个类的条件概率。分类结果是条件概率最大的分类结果。如果假设特征向量的每个分量彼此独立,则它是朴素贝叶斯分类器。如果假设特征向量服从多维正态分布,则它是正态贝叶斯分类器。
一、原理:
贝叶斯公式(Bayes' theorem)
贝叶斯决策
朴素贝叶斯分类器
朴素贝叶斯分类器特征向量为离散型随机变量
拉普拉斯平滑
朴素贝叶斯分类器特征向量为连续型随机变量
ln函数的性质
朴素贝叶斯分类器特征向量为连续型随机变量,对于二分类问题,正态贝叶斯分类器
协方差朴素贝叶斯
协方差朴素贝叶斯的训练过程
协方差朴素贝叶斯的预测算法
二、示例程序:
Scikit-learn中提供了多种朴素贝叶斯分类器,其中包括高斯朴素贝叶斯(Gaussian Naive Bayes)分类器。然而,对于鸢尾花数据集,由于其特征是连续型的,因此通常使用的是高斯朴素贝叶斯分类器。
以下是在Scikit-learn中使用高斯朴素贝叶斯分类器对鸢尾花数据集进行分类的示例:
# 导入必要的模块
import numpy as np # 导入NumPy库,并将其命名为np,这是一个用于科学计算的库,提供了多维数组和数学函数的支持
import matplotlib.pyplot as plt # 导入Matplotlib库的pyplot模块,并将其命名为plt,用于创建静态、交互式和动画图表的绘图库。
from sklearn import datasets # 从Scikit-learn库中导入datasets模块,该模块包含了一些标准的数据集,包括机器学习领域常用的一些数据集
from sklearn.naive_bayes import GaussianNB # 从Scikit-learn库中导入朴素贝叶斯分类器的高斯朴素贝叶斯模型。
import matplotlib # 导入Matplotlib库,这是一个用于绘制图表的广泛使用的库。
%matplotlib inline # 一个Jupyter Notebook魔术命令,用于在Notebook中嵌入Matplotlib图形,并在代码执行后直接在Notebook中显示图形
# 定义生成测试样本点的函数
def make_meshgrid(x, y, h=.02):
# 计算x、y的最小值和最大值
x_min, x_max = x.min() - 1, x.max() + 1
y_min, y_max = y.min() - 1, y.max() + 1
# 生成均匀网格
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
# 返回网格坐标
return xx, yy
# 定义预测测试样本并显示的函数
def plot_test_results(ax, clf, xx, yy, **params):
# 对测试样本进行预测 xx.ravel() 和 yy.ravel() 用于将二维的坐标网格
# 矩阵展平为一维数组。这是因为 clf.predict() 方法接受一维数组形式的输入
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
# 将预测结果转换为网格图像
Z = Z.reshape(xx.shape)#返回坐标网格 xx 的形状,即一个包含行数和列数的元组。
# 在网格图像上绘制等高线
ax.contourf(xx, yy, Z, **params)
# 载入iris数据集
iris = datasets.load_iris()
# 只使用前面两个特征 即鸢尾花数据集的萼片长度和萼片宽度。
X = iris.data[:, :2]#选择所有行(即所有样本)和前两列的数据
# 样本标签值
y = iris.target
# 创建并训练正态朴素贝叶斯分类器
clf = GaussianNB()
clf.fit(X,y)
# 图形标题
title = ('GaussianBayesClassifier')
# 创建图形 fig 是整个图形对象,而 ax 是包含的子图对象 子图的大小为 (5, 5)
fig, ax = plt.subplots(figsize = (5, 5))
# 调整子图布局 0.4 表示子图之间的宽度/高度间距为整个子图宽度/高度的 0.4 倍
plt.subplots_adjust(wspace=0.4, hspace=0.4)
# 获取第0、1个特征的值
X0, X1 = X[:, 0], X[:, 1]
# 生成测试样本点
xx, yy = make_meshgrid(X0, X1)
# 显示测试样本的分类结果
plot_test_results(ax, clf, xx, yy, cmap=plt.cm.coolwarm, alpha=0.8)
#绘制散点图 显示训练样本
# X0 和 X1 分别是训练样本的前两个特征变量
# c=y 指定了散点的颜色,使用了目标标签 y 中的类别信息。不同的类别用不同的颜色表示。
# cmap=plt.cm.coolwarm 指定了颜色映射,用于将类别映射到具体的颜色。
# s=20 设置了散点的大小为 20。
#edgecolors='k' 设置了散点的边缘颜色为黑色 ('k' 表示黑色)。
ax.scatter(X0, X1, c=y, cmap=plt.cm.coolwarm, s=20, edgecolors='k')
# 设置图形属性
ax.set_xlim(xx.min(), xx.max())
ax.set_ylim(yy.min(), yy.max())
ax.set_xlabel('x1')
ax.set_ylabel('x2')
ax.set_xticks(())# 将 x 轴的刻度标签设为空
ax.set_yticks(())
ax.set_title(title)
# 显示图形
plt.show()
三、贝叶斯分类器的应用
参考网址:
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