前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从零开始学Python【37】--朴素贝叶斯模型(理论部分)

从零开始学Python【37】--朴素贝叶斯模型(理论部分)

作者头像
1480
发布2019-05-28 12:19:28
5000
发布2019-05-28 12:19:28
举报

【知识铺垫】

在介绍如何使用贝叶斯概率公式计算后验概率之前,先回顾一下概率论与数理统计中的条件概率和全概率公式:

如上等式为条件概率的计算公式,表示在已知事件A的情况下事件B发生的概率,其中P(AB)表示事件A与事件B同时发生的概率。所以,根据条件概率公式得到概率的乘法公式:。

事件A的概率可以根据全概率公式计算得到:

如上等式即为全概率公式,其中事件

构成了一个完备的事件组,并且每一个

均大于0。该公式表示,对于任意的一个事件A来说,都可以表示成n个完备事件组与其乘积的和。

【贝叶斯公式】

在具备上述的基础知识之后,再来看看贝叶斯公式。如前文所说,贝叶斯分类器的核心就是在已知X的情况下,计算样本属于某个类别的概率,故这个条件概率的计算可以表示为:

其中,

表示样本所属的某个类别。假设数据集的因变量y一共包含k个不同的类别,故根据全概率公式,可以将上式中的分母表示成

;再根据概率的乘法公式,可以将上式中的分子重新改写为

。对于上面的条件概率公式而言,样本最终属于哪个类别

,应该将计算所得的最大概率值

对应的类别作为样本的最终分类,所以上式可以表示为:

如上公式所示,对于已知的X,朴素贝叶斯分类器就是计算样本在各分类中的最大概率值。接下来详细拆解公式中的每一个部分,为获得条件概率的最大值,寻找最终的影响因素。分母

是一个常量,它与样本属于哪个类别没有直接关系,所以计算

的最大值就转换成了计算分子的最大值,即

;如果分子中的

项未知的话,一般会假设每个类别出现的概率相等,只需计算

的最大值,然而在绝大多数情况下,

是已知的,它以训练数据集中类别

的频率作为先验概率,可以表示为

所以,现在的主要任务就是计算

的值,即已知某个类别的情况下自变量为某种值的概率。假设数据集一共包含p个自变量,则可以表示成

,进而条件概率可以表示为:

很显然,条件联合概率值的计算还是比较复杂的,尤其是当数据集的自变量个数非常多的时候。为了使分类器在计算过程中提高速度,提出了一个假设前提,即自变量是条件独立的(自变量之间不存在相关性),所以上面的计算公式可以重新改写为:

如上式所示,将条件联合概率转换成各条件概率的乘积,进而可以大大降低概率值

的运算时长。但问题是,在很多实际项目的数据集中,很难保证自变量之间满足独立的假设条件。根据这条假设,可以得到一般性的结论,即自变量之间的独立性越强,贝叶斯分类器的效果就会越好;如果自变量之间存在相关性,就会在一定程度提高贝叶斯分类器的错误率,但通常情况下,贝叶斯分类器的效果不会低于决策树。

自变量X的数据类型可以是连续的数值型,也可以是离散的字符型,或者是仅含有0-1两种值的二元类型。通常会根据不同的数据类型选择不同的贝叶斯分类器,例如高斯贝叶斯分类器、多项式贝叶斯分类器和伯努利贝叶斯分类器。

【高斯贝叶斯分类器】

如果数据集中的自变量X均为连续的数值型,则在计算

时会假设自变量服从高斯正态分布,所以自变量的条件概率可以表示成:

其中,

表示第j个自变量的取值,

为训练数据集中自变量

属于类别

的均值,

为训练数据集中自变量

属于类别

的标准差。所以在已知均值

和标准差

时,就可以利用如上的公式计算自变量

取某种值的概率。

【多项式贝叶斯分类器】

如果数据集中的自变量X均为离散型变量,就无法使用高斯贝叶斯分类器,而应该选择多项式贝叶斯分类器。在计算概率值

时,会假设自变量X的条件概率满足多项式分布,故概率值

的计算公式可以表示为:

其中,

表示自变量

的取值;

表示因变量为类别

时自变量

的样本个数;

表示数据集中类别

的样本个数;

为平滑系数,用于防止概率值取0可能,通常将该值取为1,表示对概率值做拉普拉斯平滑;n表示因变量的类别个数。

【伯努利贝叶斯分类器】

当数据集中的自变量X均为0-1二元值时(例如在文本挖掘中,判断某个词语是否出现在句子中,出现用1表示,不出现用0表示),通常会优先选择伯努利贝叶斯分类器。利用该分类器计算概率值

时,会假设自变量X的条件概率满足伯努利分布,故概率值

的计算公式可以表示为:

其中,

为第j个自变量,取值为0或1;表示类别为

时自变量取1的概率,该概率值可以使用经验频率代替,即

其中,

表示类别

的样本个数;

表示在类别为

时,变量取1的样本量;

为平滑系数,同样是为了避免概率为0而设置的;n为因变量中的类别个数。

有关贝叶斯算法的原理就介绍到这里,除此,如何借助于简单的案例解释原理背后的道理,可以在我的新书《从零开始学Python数据分析与挖掘》中得到详细的答案。

【结语】

OK,关于贝叶斯算法的理论知识我们就分享到这里,如果你有任何问题,欢迎在公众号的留言区域表达你的疑问,下一期我们将分享三种贝叶斯算法的实战案例。同时,也欢迎各位朋友继续转发与分享文中的内容,让更多的人学习和进步。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据分析1480 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档