购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3 朴素贝叶斯分类算法实现
——三文鱼和鲈鱼的分类

本节将介绍如何利用朴素贝叶斯分类算法思想,实现三文鱼和鲈鱼的分类。通过贝叶斯分类算法实现过程,掌握如何得到条件概率、后验概率及可视化方法,从而学会针对任意给定的样本数据,构造贝叶斯分类器进行分类。

3.3.1 算法实现

(1)先用自己设置的均值和方差,用正态分布分别生成鲈鱼和三文鱼的1000个样本的长度和亮度数据集,500个训练样本,500个测试样本,并画出散点图。

(2)根据鲈鱼和三文鱼各500个训练样本,假设样本是正态分布,估计鲈鱼和三文鱼长度和亮度的正态分布参数,画出估计的类条件概率密度图。

(3)假设先验概率相同,均为0.5,利用贝叶斯公式,分别计算长度和亮度的一维分类结果,画出后验概率密度图,计算分类结果的正确率和错误率。

(4)假设长度和亮度是互相完全独立的,利用贝叶斯公式和联合概率密度公式构造鲈鱼和三文鱼的二维分类器,计算分类结果的正确率和错误率。

1.生成数据

利用Python的生成随机数函数randn生成均值和方差1000个样本数据。三文鱼和鲈鱼的长度、亮度特征如表3-2所示。

表3-2 三文鱼和鲈鱼的长度、亮度特征

根据表3-2的均值和方差生成三文鱼和鲈鱼样本数据的算法如下:

三文鱼和鲈鱼的散点图如图3-4所示。

图3-4 三文鱼和鲈鱼的散点图

2.生成三文鱼和鲈鱼的概率密度

根据生成长度和亮度数据,利用均值和方差公式直接计算长度和亮度特征的均值和方差。

当然也可以直接使用salmon_variance=np.var(salmon[0:num//2,1])求出三文鱼的亮度特征方差。其他特征的方差可用类似的方法获取。

计算出的三文鱼和鲈鱼的长度、亮度均值和方差为:

根据估计出来的三文鱼和鲈鱼长度、亮度特征均值和方差,画出类条件概率密度函数:

图3-5 三文鱼和鲈鱼的概率密度

三文鱼和鲈鱼的概率密度如图3-5所示。其中,scipy.stats.norm函数可以实现正态分布。scipy.stats.norm.pdf用于求概率密度,它有两种调用方式:

(1)gauss1=stats.norm(loc=0,scale=2)#loc为均值,scale为标准差

y=gauss1.pdf(x)#x为特征,y为条件概率密度

(2)y=norm.pdf(x,loc,scale)

3.计算三文鱼和鲈鱼的后验概率

根据得到三文鱼和鲈鱼的长度、亮度特征类条件概率,利用朴素贝叶斯公式计算出它们的后验概率。

后验概率密度如图3-6所示。

图3-6 三文鱼和鲈鱼的后验概率密度

4.计算分类正确率

程序运行结果如下:

若长度和亮度是互相完全独立的,根据朴素贝叶斯公式和联合概率密度公式,得出鲈鱼和三文鱼的二维分类器,并计算它们的分类正确率和错误率。

程序运行结果如下:

若长度和亮度不独立的话,如何对三文鱼和鲈鱼进行分类呢?可以根据它们的两个特征(长度和亮度)计算出协方差矩阵,根据协方差矩阵计算概率密度,完成朴素贝叶斯分类。

3.3.2 调用系统函数实现

正态朴素贝叶斯分类算法在Scikit-learn中的实现类如下:

主要参数说明如下:

主要属性如下:

主要方法如下:

使用正态朴素贝叶斯算法对三文鱼和鲈鱼分类算法如下:

程序运行结果如下: k1JqAwOoZPudkKBgDjvhxQ5lS1Y6h7gf1C3oDx6Hl9S8ZmoMtx/CQQ8HjFFAeaO1

点击中间区域
呼出菜单
上一章
目录
下一章
×