一、贝叶斯公式(一些必备的数学基础)
贝叶斯(Thomas Bayes)是生活在十八世纪的一名英国牧师和数学家。因为历史久远,加之他没有太多的著述留存,今天的人们对贝叶斯的研究所知甚少。唯一知道的是,他提出了概率论中的贝叶斯公式。但从他曾经当选英国皇家科学学会会员(类似于院士)来看,他的研究工作在当时的英国学术界已然受到了普遍的认可。
事实上,在很长一段时间里,人们都没有注意到贝叶斯公式所潜藏的巨大价值。直到二十世纪人工智能、机器学习等崭新学术领域的出现,人们才从一堆早已蒙灰的数学公式中发现了贝叶斯公式的巨大威力。为了方便后续内容的介绍,这里我们先来简单复习一下概率论中的一些基本知识。
事件A在另外一个事件B已经发生条件下的发生概率,称为条件概率,记为P(A|B)。
两个事件共同发生的概率称为联合概率。A与B的联合概率表示为 P(AB) 或者P(A,B)。
进而有,P(AB) = P(B)P(A|B)=P(A)=P(B|A)。这也就导出了最简单形式的贝叶斯公式,即
P(A|B)=P(B|A)*P(A)/P(B)
以及条件概率的链式法则
P(A1,A2,...,An) = P(An|A1,A2,...,An-1)P(An-1|A1,A2,...,An-2)...P(A2|A1)P(A1)
概率论中还有一个全概率公式
由此可进一步导出完整的贝叶斯公式
二、朴素贝叶斯分类器(Na?ve Baysian classifier)
分类是机器学习和数据挖掘中最基础的一种工作。假设现在我们一组训练元组(Training tuples),或称训练样例,以及与之相对应的分类标签(Class labels)。每个元组都被表示成n维属性向量X=(x1, x2, ..., xn)的形式,而且一共有K个类,标签分别为C1, C2, ..., Ck。分类的目的是当给定一个元组X时,模型可以预测其应当归属于哪个类别。
朴素贝叶斯分类器的原理非常简单,就是基于贝叶斯公式进行推理,所以才叫做“朴素”。对于每一个类别Ci, 利用贝叶斯公式来估计在给定训练元组X时的条件概率p(Ci|X),即
P(Ci|X) = P(X|Ci)P(Ci)/P(X)
当且仅当概率P(Ci|X)在所有的P(Ck|X)中取值最大时,就认为X属于Ci。更进一步,因为P(X)对于所有的类别来说都是恒定的,所以其实只需要P(Ci|X) = P(X|Ci)P(Ci)最大化即可。
应用朴素贝叶斯分类器时必须满足条件:所有的属性都是条件独立的。也就是说,在给定条件的情况下,属性之间是没有依赖关系的。即
为了演示贝叶斯分类器,来看下面这个例子。我们通过是否头疼、咽痛、咳嗽以及体温高低来预测一个人是普通感冒还是流感。
上面是我们提供的训练数据。现在有一个病人到诊所看病,他的症状是:severeheadache, no soreness, normaltemperature and with cough。请问他患的是普通感冒还是流感?分析易知,这里的分类标签有Flu 和Cold两种。于是最终要计算的是下面哪个概率更高。
P( Flu| Headache = severe, Sore = no,Temperature = normal, Cough = yes)
?P(Flu)*P(Headache= severe|Flu)*P(Sore= no|Flu)*P(Temperature= normal |Flu)*P(Cough = yes|Flu)
P( Cold| Headache = severe, Sore = no,Temperature = normal, Cough = yes)
?P(Cold)*P(Headache= severe|Cold)*P(Sore= no|Cold)*P(Temperature= normal |Cold)*P(Cough = yes |Cold)
为了计算上面这个结果,我们需要通过已知数据(训练数据)让机器自己“学习”(建立)一个“模型”。由已知模型很容以得出下表中的结论
以及
e= small value = 10^-7(one can use e to be less than 1/n where n is the number of training instances)
P( Flu| Headache = severe, Sore = no,Temperature = normal, Cough = yes)
= P(Flu)*P(Headache = severe|Flu)*P(Sore= no|Flu)*P(Temperature = normal |Flu)*P(Cough = yes|Flu)
= 3/5 × 2/3 × e × 2/3 × 3/3 = 0.26e
P( Cold| Headache = severe, Sore = no,Temperature = normal, Cough = yes)
~ P(Cold)*P(Headache =severe|Cold)*P(Sore = no|Cold)*P(Temperature = normal |Cold)*P(Cough = yes|Cold)
= 2/5 × e × ? × 1 × ? = 0.1e
显然P(Flu) > P(Cold),所以我们的诊断(预测,分类)结果是 Flu。
最后讨论一下朴素贝叶斯分类器的特点(来自网上资料总结,我就不翻译了):
? Na?ve Bayesian Classifier is very simple to build, extremely fast to make decisions, and easy to change the probabilities when the new data becomes available (especially when the new data is additional information not modification to previously used data).
? Works well in many application areas.
? Scales easily for large number of dimensions (100s) and data sizes.
? Easy to explain the reason for the decision made.
? One should apply NB first before launching into more sophisticated classification techniques.
我们将把贝叶斯网络留待下一篇文章中介绍(未完,待续...)。