查看原文
其他

干货|非常通俗的朴素贝叶斯算法(Naive Bayes)

2017-07-18 Poll 机器学习算法与自然语言处理

朴素贝叶斯算法(Naive Bayes)

阅读目录

  • 一、病人分类的例子

  • 二、朴素贝叶斯分类器的公式

  • 三、账号分类的例子

  • 四、性别分类的例子

生活中很多场合需要用到分类,比如新闻分类、病人分类等等。

本文介绍朴素贝叶斯分类器(Naive Bayes classifier),它是一种简单有效的常用分类算法。


1 病人分类的例子


让我从一个例子开始讲起,你会看到贝叶斯分类器很好懂,一点都不难。

某个医院早上收了六个门诊病人,如下表截图。

现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大?

根据贝叶斯定理:

可得:                         

假定"打喷嚏"和"建筑工人"这两个特征是独立的,因此,上面的等式就变成了:        

这是可以计算的:                

因此,这个打喷嚏的建筑工人,有66%的概率是得了感冒。同理,可以计算这个病人患上过敏或脑震荡的概率。


比较这几个概率,就可以知道他最可能得什么病。


这就是贝叶斯分类器的基本方法:在统计资料的基础上,依据某些特征,计算各个类别的概率,从而实现分类。


2  朴素贝叶斯分类器的公式


假设某个体有n项特征(Feature),分别为F1、F2、...、Fn。现有m个类别(Category),分别为C1、C2、...、Cm

贝叶斯分类器就是计算出概率最大的那个分类,也就是求下面这个算式的最大值:   

由于 P(F1F2...Fn) 对于所有的类别都是相同的,可以省略,问题就变成了求的最大值:             

朴素贝叶斯分类器则是更进一步,假设所有特征都彼此独立,因此:

上式等号右边的每一项,都可以从统计资料中得到,由此就可以计算出每个类别对应的概率,从而找出最大概率的那个类。

虽然"所有特征彼此独立"这个假设,在现实中不太可能成立,但是它可以大大简化计算,而且有研究表明对分类结果的准确性影响不大。

下面再通过两个例子,来看如何使用朴素贝叶斯分类器。


3  账号分类的例子


本例摘自张洋的《算法杂货铺----分类算法之朴素贝叶斯分类》。

根据某社区网站的抽样统计,该站10000个账号中有89%为真实账号(设为C0),11%为虚假账号(设为C1)。

接下来,就要用统计资料判断一个账号的真实性。假定某一个账号有以下三个特征:        

            

请问该账号是真实账号还是虚假账号?


方法是使用朴素贝叶斯分类器,计算下面这个计算式的值。               

虽然上面这些值可以从统计资料得到,但是这里有一个问题:F1和F2是连续变量,不适宜按照某个特定值计算概率。


一个技巧是将连续值变为离散值,计算区间的概率。


比如将F1分解成[0, 0.05]、(0.05, 0.2)、[0.2, +∞]三个区间,然后计算每个区间的概率。在我们这个例子中,F1等于0.1,落在第二个区间,所以计算的时候,就使用第二个区间的发生概率。


根据统计资料,可得:

                              

因此:                         

可以看到,虽然这个用户没有使用真实头像,但是他是真实账号的概率,比虚假账号高出30多倍,因此判断这个账号为真。


4  性别分类的例子


本例摘自维基百科,关于处理连续变量的另一种方法。下面是一组人类身体特征的统计资料。

已知某人身高6英尺、体重130磅,脚掌8英寸,请问该人是男是女?根据朴素贝叶斯分类器,计算下面这个式子的值。

这里的困难在于,由于身高、体重、脚掌都是连续变量,不能采用离散变量的方法计算概率。而且由于样本太少,所以也无法分成区间计算。怎么办?


这时,可以假设男性和女性的身高、体重、脚掌都是正态分布,通过样本计算出均值和方差,也就是得到正态分布的密度函数。

有了密度函数,就可以把值代入,算出某一点的密度函数的值。


比如,男性的身高是均值5.855、方差0.035的正态分布。

所以,男性的身高为6英尺的概率的相对值等于1.5789(大于1并没有关系,因为这里是密度函数的值,只用来反映各个值的相对可能性)。

有了这些数据以后,就可以计算性别的分类了。

   

可以看到,女性的概率比男性要高出将近10000倍,所以判断该人为女性。

原文地址:http://www.cnblogs.com/maybe2030/

推荐阅读:

为什么要对数据进行归一化处理?

logistic函数和softmax函数

视频讲解|为什么神经网络参数不能全部初始化为全0


全是通俗易懂的硬货!只需置顶~欢迎关注交流~




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存