用Python从0实现贝叶斯分类器的机器学习教程

pip3 install -i https://pypi.douban.com/simple pandas  (可以快速的安装一些Python的包)


朴素贝叶斯算法简单高效,在处理分类问题上,是首先考虑的方法之一。

本文简单介绍朴素贝叶斯算法的原理和Python版本的逐步实现。

p(a | b) = (p(b|a) *p (a) ) / p(b)

朴素贝叶斯算法是一个直观的方法,使用每个归属于某个类的概率来做预测。你可以使用这种监督性学习方法,对一个预测性建模问题进行概率建模。

给定一个类,朴素贝叶斯假设每个属性归属于此类的概率独立于其余所有属性,从而简化了概率的计算。这种假设产生了一个快速、有效的方法。

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

我们可以通过计算样本归属于每个类的概率,然后选择具有最高概率的类来做预测。

通常,我们使用分类数据来描述朴素贝叶斯,因为这样容易通过比率来描述、计算。一个符合我们目的、比较有用的算法需要支持数值属性,同时假设每一个数值属性服从正态分布(分布在一个钟形曲线上),这又是一个强假设,但是依然能够给出一个健壮的结果。

预测糖尿病的发生

本文使用的测试问题是"皮马印第安人糖尿病问题"。

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

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

机器学习文献中已经多次研究了这个标准数据集,好的预测精度为70%到76%.

下面是pima-indians.data.csv文件中的一个样本,了解一下我们将要使用的数据。

注意:下载文件,然后以.csv扩展名保存。查看文件中所有属性的描述。

朴素贝叶斯算法教程

教程分为如下几步:

1、处理数据:从csv文件中载入数据,然后划分为训练集和测试集。

2、提取数据特征:提取训练数据集的属性特征,以便我们计算概率并做出预测。

3、单一预测:使用数据集的特征生成单个预测。

4、多重预测:基于给定测试数据集和一个已提取特征的训练数据集生成预测。

5、评估精度:评估对于测试数据集的预测精度作为预测正确率。

6、合并代码:使用所有代码呈现一个完整的、独立的朴素贝叶斯算法的实现。


1、处理数据

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

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

下一步,我们将数据分为用于朴素贝叶斯预测的训练数据集,以及用来评估模型精度的测试数据集。我们需要将数据集随机分为包含67%的训练集和包含33%的测试集(这是在此数据集上测试算法的通常比率)。

下面是splitDataset()函数,它以给定的划分比例将数据集进行划分。

我们可以定义一个具有5个样例的数据集来进行测试,首先它分为训练集和测试数据集,然后打印出来,看看每个数据样本最终落在哪个数据集。

提取数据特征

朴素贝叶斯模型包含训练数据集中数据的特征,然后使用这个数据特征来做预测。

所收集的训练数据的特征,包含相对于每个类的每个属性的均值和标准差。举例来说,如果有2个类和7个数值属性,然后我们需要每一个属性(7)和类(2)的组合的均差和标准差,也就是14个属性特征。

在对特定的属性归属于每个类的概率做计算、预测是,将用到这些特征。

我们将数据特征的获取划分为以下的子任务:

按类别划分数据

计算均值

计算标准差

提取数据集特征

按类别提取属性特征

按类别划分数据

首先将训练数据集中的样本按照类别进行划分,然后计算出每个类的统计数据。

提取数据集特征 对每个属性均值和标准差  summarize函数

按类别提取属性特征   就是合并代码按顺序执行  summarizeByClass

预测:

1、计算高斯概率密度函数

属性值、均值、标准差融入高斯函数,然后得到属性值归属某个类的似然。calculateProbability函数

2、计算对应类的概率

乘法合并概率,整个数据样本属于某个类的概率。calculateClassProbabilities函数

3、单一预测

根据每个数据样本对于每个类的概率,返回应该属于的类。

多重预测    getPredictions函数

4、评估精度

预测值和测试数据集中的类别值进行比较。getAccuracy函数

合并代码   用mian()函数来进行预测

Demo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容