作家
登录

机器学习之用Python从零实现贝叶斯分类器

作者: 来源: 2017-06-22 14:01:02 阅读 我要评论

  1. dataset = [[1,20,1], [2,21,0], [3,22,1], [4,22,0]] 
  2.  
  3. summary = summarizeByClass(dataset) 
  4.  
  5. print('Summary by class value: {0}').format(summary)  

朴实贝叶斯算法简单高效,在处理分类问题上,是应当起首推敲的办法之一。

经由过程本教程,你将学到朴实贝叶斯算法的道理和Python版本的慢慢实现。

更新:查看后续的关于朴实贝叶斯应用技能的文┞仿“Better Naive Bayes: 12 Tips To Get The Most From The Naive Bayes Algorithm”

关于朴实贝叶斯

朴实贝叶斯算法是一个直不雅的办法,应用每个属性归属于某个类的概率来做猜测。你可以应用这种监督性进修办法,对一个猜测性建模问题进行概率建模。

给定一个类,朴实贝叶斯假设每个属性归属于词攀类的概率自力于其余所有属性,大年夜而简化了概率的计算。这种强假定产生了一个快速、有效的办法。

运行测试,你会看到如下结不雅:

给定一个属性值,其属于某个类的概率叫做前提概率。对于一个给定的类值,将每个属性的前提概率相乘,便获得一个数据样本属于某个类的概率。

运行测试,你会看到如下结不雅:

平日,我们应用分类数据来描述朴实贝叶斯,因为如许轻易经由过程比率来描述、计算。一个相符我们目标、比较有效的算法须要支撑数值属性,同时假设每一个数值属性服大年夜正态分布(分布在一个钟形曲线上),这又是一个强假设,然则依然可以或许给出一个结实的结不雅。

猜测糖尿病的产生

  1. numbers = [1,2,3,4,5] 
  2.  
  3. print('Summary of {0}: mean={1}, stdev={2}').format(numbers, mean(numbers), stdev(numbers))  

本文应用的测试问题是“皮马印第安人糖尿病问题”。

最后,经由过程对测试数据集中每个数据样本的猜测,我们可以评估模型精度。getPredictions()函数可以实现这个功能,并返回每个测试样本的预摆设表。

这个问题包含768个对于皮马印第安患者的医疗不雅测细节,记录所描述的瞬时测量取自诸如患者的年纪,怀孕和血液检查的次数。所有患者都是21岁以上(含21岁)的女性,所有属性都是数值型,并且属性的单位各不雷同。

每一个记录归属于一个类,这个类指明以测量时光为止,患者是否是在5年之内感染的糖尿病。如不雅是,则为1,不然为0。

机械进修文献中已经多次研究了这个标准数据集,好的猜测精度为70%-76%。

留意:下载文件,然后以.csv扩大名保存(如:pima-indians-diabetes.data.csv)。查看文件中所有属性的描述。

  1. 6,148,72,35,0,33.6,0.627,50,1 
  2.  
  3. 1,85,66,29,0,26.6,0.351,31,0 
  4.  
  5. 8,183,64,0,0,23.3,0.672,32,1 
  6.  
  7. 1,89,66,23,94,28.1,0.167,21,0 
  8.  
  9. 0,137,40,35,168,43.1,2.288,33,1  

朴实贝叶斯算法教程

教程分为如下几步:

1.处理数据:大年夜CSV文件中载入数据,然后划分为练习集和测试集。

2.提取数据特点:提取练习数据集的属性特点,以便我们计算概率并做出猜测。

3.单一猜测:应用数据集的特点生成单个猜测。

4.多重猜测:基于给定测试数据集和一个已提取特点的练习数据集生成猜测。

5.评估精度:评估对于测试数据集的猜测精度作为猜测精确率。

6.归并代码:应用所有代码出现一个完全的、自力的朴实贝叶斯算法的实现。

1.处理数据

起首加载数据文件。CSV格局的数据没有标题行和任何引号。我们可以应用csv模块中的open函数打开文件,应用reader函数攫取行数据。

我们也须要将以字符串类型加载进来属性转换为我们可以应用的数字。下面是用来加载匹马印第安人数据集(Pima indians dataset)的loadCsv()函数。

  1. import csv 
  2.  
  3. def loadCsv(filename): 
  4.  
  5. lines = csv.reader(open(filename, "rb")) 
  6.  
  7. dataset = list(lines) 
  8.  
  9. for i in range(len(dataset)): 
  10.  
  11. dataset[i] = [float
     1/7    1 2 3 4 5 6 下一页 尾页

      推荐阅读

      宁波电信:大数据推动基层社会服务转型

    日前,在第十四届中国信息港论坛举办的“2017年中国信息通信与‘互联网+’应用优良结不雅奖”颁奖典礼上,中国电信浙江宁波分公司的“宁波市基层社会办事治理综>>>详细阅读


    本文标题:机器学习之用Python从零实现贝叶斯分类器

    地址:http://www.17bianji.com/lsqh/35863.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)