【知识铺垫】
在介绍如何使用贝叶斯概率公式计算后验概率之前,先回顾一下概率论与数理统计中的条件概率和全概率公式:
如上等式为条件概率的计算公式,表示在已知事件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,关于贝叶斯算法的理论知识我们就分享到这里,如果你有任何问题,欢迎在公众号的留言区域表达你的疑问,下一期我们将分享三种贝叶斯算法的实战案例。同时,也欢迎各位朋友继续转发与分享文中的内容,让更多的人学习和进步。
标签:概率,Python,公式,37,贝叶斯,分类器,--,类别,自变量 From: https://blog.51cto.com/u_9205406/5896603