机器学习理论大会战——朴素贝叶斯(计算实例)
Posted AI雄霸天下
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习理论大会战——朴素贝叶斯(计算实例)相关的知识,希望对你有一定的参考价值。
朴素贝叶斯实例
讲了一大通的数学公式及其解释后,我们现在来看一下如何消化这些枯燥的数学公式。
我以网上找到的一张数据表为例,这张表中记录的数据就是通过查看一个人的身高、体重、鞋码来判定这个人是男人还是女人。数据是离散型的数值,如下表所示:
我们先做一个简单的符号标记:
用C1代表男人,C2代表女人;
用A1代表身高,A2代表体重,A3代表鞋码。
首先,我们通过数据可以得出是C1的概率为1/2,是C2的概率也是1/2。
接着,我们来计算一下当类别是C1时,
其A1属性值为为高的概率:
P(A1=高|C1)=2/4=1/2;
A1属性值为中的概率是:
P(A1=中|C1)=2/4 = 1/2;
A1属性值为矮的概率是:
P(A1=矮|C1)=0/4=0。
这里出现了概率为0的现象,这是我们在之前所介绍的需要引入平滑处理的时候了。此时我们做一点适当的“拉普拉斯”处理,使得概率不等于0:
P(A1=矮|C1)=(0+1)/(4+2)=1/6。注意,4代表是男人的数目,2则代表了数据中类别的个数为2。此时我们需要重新计算一下不同类别的一个先验概率P(C):
P(C1)=(4+1)/(8+2)=1/2;P(C2)=(4+1)/(8+2)=1/2。嘿,居然和不平滑处理前的先验概率一样,不过这只是巧合,哈哈。
PS:如果一个特征的后验概率在不考虑平滑处理前不为0时,就不必要做平滑处理了。
现在我们依照上面的计算思路来汇总一下所有的概率值:
类别先验概率:
P(C1)=(4+1)/(8+2)=1/2;P(C2)=(4+1)/(8+2)=1/2。
A1特征值的后验概率:
P(A1=高|C1)=2/4=1/2;P(A1=中|C1)=2/4 = 1/2;
P(A1=矮|C1)=(0+1)/(4+2)=1/6;
P(A1=高|C2)=(0+1)/(4+2)=1/6;P(A1=中|C2)=1/4;
P(A1=矮|C2)=3/4;
A2特征值的后验概率:
P(A2=重|C1)=2/4=1/2;P(A2=中|C1)=2/4 = 1/2;
P(A2=轻|C1)=(0+1)/(4+2)=1/6;
P(A2=重|C2)=(0+1)/(4+2)=1/6;P(A2=中|C2)=2/4=1/2;
P(A2=轻|C2)=2/4=1/2;
A3特征值的后验概率:
P(A3=大|C1)=3/4;P(A3=中|C1)=1/4 ;
P(A3=小|C1)=(0+1)/(4+2)=1/6;
P(A3=大|C2)=(0+1)/(4+2)=1/6;P(A3=中|C2)=2/4=1/2;
P(A3=小|C2)=2/4=1/2;
以上就是全部的概率值。现在的问题来了,假如,我们现在得到了一个新的统计数据,三个特征分别为:中、中、大,那么这组数据究竟是男人的呢还是女人的呢?
我们需要计算一下这组数据下是男人的概率和是女人的概率,然后比较这两个概率的大小,如果是男人的概率大于是女人的概率,那么就可以判定这组数据描述的是一个男人,否则就是在说一个女人:
用朴素贝叶斯公式分别求是男人还是女人的概率:
P(C=男|A1=中,A2=中,A3=大)=
P(C=男)P(A1=中,A2=中,A3=大|C=男)/P(A1=中,A2=中,A3=大)
P(C=女|A1=中,A2=中,A3=大)=
P(C=女)P(A1=中,A2=中,A3=大|C=女)/P(A1=中,A2=中,A3=大)
从以上两个计算式,我们可以看出,实际上比较的是P(C=男)P(A1=中,A2=中,A3=大|C=男)与P(C=女)P(A1=中,A2=中,A3=大|C=女)的大小。而我们通过朴素贝叶斯的通俗假设:各个特征之间是相互独立存在的,再结合上面表中各个特征值的后验概率,因此我们可以得出这样一个等式:
P(A1=中,A2=中,A3=大|C=男) = P(A1=中|C=男)P(A2=中|C=男)P(A3=大|C=男)=0.5*0.5*0.75=0.1875。而P(C=男)=0.5,因此,当前数据:中、中、大所表示的人为男人的概率为:0.09375。
P(A1=中,A2=中,A3=大|C=女) = P(A1=中|C=女)P(A2=中|C=女)P(A3=大|C=女)=0.25*0.5*0.17=0.02125。而P(C=女)=0.5,因此,当前数据:中、中、中所表示的人为男人的概率为:0.010625。
故而,当前新给出的数据是描述男人的概率为0.09375。而描述成女人的概率则为0.010625。此时我们就知道:哦,原来这组数据描述的是一个男人。
这就是一个比较简单的朴素贝叶斯计算的例子。大家如果多实践几遍之后,不妨以代码的形式将它实现出来,这样你就具备了自己动手来实现一个简单的朴素贝叶斯分类器的能力。
有一个小小的问题留给大家:如果给定的数据不是:中、中、大,而是中、中、中时,大家计算一下,看看这组数据表示的是男人还是女人?没准会有惊喜的结果哦。
小结
这一节的主要任务就是在前面理论知识分享的基础上,以一个比较简单的实例来感受一下如何开展朴素贝叶斯的分类计算。也可以说这样一个简单的计算实例就已经完整地展示了朴素贝叶斯进行分类时的运算机制。
当然,我们所举的例子中,各个特征的取值是离散的。而现实生活中,有很多的例子,其数据的特征取值既有离散的,又有连续的。针对这种情形的朴素贝叶斯分类计算,通常我们会这么来展开:
1、对于取值为离散的特征,依然可以参照上面的计算方法来计算各个特征值的后验概率;
2、对于取值为连续型数值的特征,我们就要假定这些特征都服从N(μc,i,σc,i2)的分布,其中,μc,i,σc,i2分别是第c类样本在第i个属性上取值的均值和方差。
因此,对于取值为连续型数值的特征,我们首先需要计算出当前特征下的均值与方差,然后利用如下的公式来计算当前的特征取值为某个值时的后验概率:
这里的xi就表示数据X的第i项特征的具体取值,c表示某个类别,μc,i,σc,i2分别是第c类样本在第i个属性上取值的均值和方差。
如此一来,我们在计算具备连续型数值的特征的后验概率时,恐怕就得依赖于具体的程序来帮我们去实现,因为靠人工,估计会很麻烦滴。
算出各个特征的连续型取值的后验概率后,接下来计算给定的一组新数据属于哪一类的概率就可以利用朴素贝叶斯的概率计算公式来帮我们搞定,具体的计算就如同上面的计算过程一般。
到此为止,我们就简单的给大家分享了一下如何开展朴素贝叶斯分类的计算。希望能对大家理解朴素贝叶斯分类原理有一点点帮助。如果在理解过程中觉得有偏差或错误之处,还请帮忙指出,我会视情况予以纠正,以方便后来者,谢谢大家。
下一节,我们就简单地来看一下朴素贝叶斯分类在Scikit-learn中的三个经典实现函数,在比较典型的乳腺癌数据集上的分类效果。
以上是关于机器学习理论大会战——朴素贝叶斯(计算实例)的主要内容,如果未能解决你的问题,请参考以下文章