朴素贝叶斯

朴素贝叶斯主要分为如下几个步骤

第一步,处理数据
首先需要加载数据文件。数据为CSV格式.使用open函数打开文件,并使用csv模块中的reader函数读取数据行。
为了可以使用,我们还需要转换属性,因为加载是是作为字符串加载的,但是我们使用时需要的是数字格式。 下图定义了loadCsv()函数,用于加载Pima indians数据集。
在这里插入图片描述
我们可以通过加载pima indians数据集并打印出数据总条数来测试此函数。
结果如下
在这里插入图片描述
接下来将数据拆分为用于进行预测的训练数据集和用于评估模型准确性的测试数据集。 我们需要将数据集随机分成训练集和数据集,比率为67%的训练集和33%测试集(这是常用比率)。
下图是splitDataset()函数,它根据给定的比率拆分数据集。
在这里插入图片描述
我们可以通过一个模拟数据集来测试它,将其拆分为训练和测试数据集并打印出来看看分别是哪些被分为测试集哪些被分为训练集。
在这里插入图片描述
结果如下,多运行几次可以证明完全是随机拆分的
在这里插入图片描述

第二步,归纳数据
朴素贝叶斯模型由训练数据集归纳后的属性组成。进行预测时会使用到。
归纳的属性把包括每个属性按类别计算的平均值和标准偏差。 例如,如果有2个类别和7个属性,那么我们需要每个属性(7)和类别(2)组合的均值和标准差,即14个归纳出的属性。
在进行预测以计算属于每个类别的特定属性值的概率时,这些工作都是必需的。
我们把归纳的准备工作分解为以下子任务:
按类别分离数据
计算平均值
计算标准差
总结数据集
按类别汇总属性
首先是按类别分离数据,定义函数如下图
在这里插入图片描述
可以看到该函数假定最后一个属性是类值。 该函数将返回类值到数据实例列表的映射。
我们可以使用一些示例数据测试此函数,如下所示
在这里插入图片描述
结果如下
在这里插入图片描述

然后计算平均值
我们需要计算类值的每个属性的平均值。平均值是数据的中心或中心趋势,我们在计算概率时将其用作高斯分布的中间值。
我们还需要计算类值的每个属性的标准偏差。 标准偏差描述了数据传播的变化,我们将用它来表征计算概率时高斯分布中每个属性的预期传播。
标准偏差计算为方差的平方根。方差计算公式为每个属性值与平均值的平方差的平均值。
两个函数如下:
在这里插入图片描述
用简单的数据测试一下
在这里插入图片描述
结果如下
在这里插入图片描述

接下来就是归纳数据集
有了上面的函数后,对于给定的实例列表可以计算每个属性的均值和标准差。
zip函数将数据实例中每个属性的值分组到它们自己的列表中,以便计算属性的均值和标准差值。
函数如下
在这里插入图片描述
我们可以使用一些测试数据来测试summarize()函数
在这里插入图片描述
结果如下
在这里插入图片描述
这些测试数据显示数据的第一个属性和第二个属性的平均值和标准偏差值明显不同。

最后按类汇总属性
我们首先将训练数据集分成按类分组的实例来将它们整合在一起。然后进行计算。
函数如下
在这里插入图片描述
使用少量数据进行测试
在这里插入图片描述
结果如下

在这里插入图片描述

第三步就是做出预测了
我们现在准备根据上一步的结果进行预测。进行预测涉及计算给定数据实例属于每个类的概率,然后选择具有最大概率的类作为预测。
我们可以将这个部分分为以下任务:
计算高斯概率密度函数
计算类的概率
做出预测
估计准确度

首先是计算高斯概率密度
在给定从训练数据集的属性的已知平均值和标准偏差的情况下,我们可以使用高斯函数来估计给定属性值的概率。
在calculateProbability()函数中,我们首先计算指数,然后计算主要的除法运算。 这让我们可以在两条线上很好地拟合方程。
在这里插入图片描述
使用数据进行测试
在这里插入图片描述
结果如下

在这里插入图片描述
接下来计算类的概率
现在我们可以计算出属于某个类的属性的概率,我们可以组合数据实例的所有属性值的概率,并得出整个数据实例属于该类的概率。
在下面的函数中,通过将每个类的属性概率相乘来计算给定数据实例的概率。结果是类值与概率的映射。
在这里插入图片描述
使用数据进行测试
在这里插入图片描述
结果如下

在这里插入图片描述
接下来做出预测
现在我们可以计算属于每个类值的数据实例的概率,可以查找最大概率并返回有关联的类。函数如下
在这里插入图片描述
使用数据进行测试
在这里插入图片描述
结果如下

在这里插入图片描述

第四步就是做出预测
最我们可以通过对测试数据集中的每个数据实例进行预测来估计模型的准确性。 下图的函数将执行此操作并返回每个测试实例的预测列表。
在这里插入图片描述
给出数据进行测试
在这里插入图片描述
结果如下

在这里插入图片描述

第五步就是计算准确度
我们可以将预测的值与测试数据集中的类值进行比较,并且可以计算为0和100%之间的准确度。下面的函数将计算此准确率。
在这里插入图片描述
给出数据进行测试
在这里插入图片描述
结果如下
在这里插入图片描述

到现在为止,我们把所有的关键函数都写完了,把它们组合在一起就是完整的朴素贝叶斯的实现了.
我们将其组合在一起,来针对一个完整的案例进行测试,数据集来自Pima Indians Diabetes主题,这个主题包括对Pima印第安人医疗细节的768次观察。记录描述了从患者身上获取的瞬时测量值,例如他们的年龄,怀孕次数和血液检查次数。 所有患者均为21岁或以上的女性。所有属性都是数字其单位因属性而异。
每个记录具有类别值,该类别值指示患者在进行测量(1)或不进行测量(0)的5年内是否患有糖尿病。这个数据集已在机器学习文献中进行了大量研究。大部分论文给出的预测准确率为70%-76%。数据集文件为pima-indians.data.csv

完整的代码篇幅太长就不截图了,在nb.py里
运行结果如下

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值