关注贝叶斯的原因是看不懂这篇论文:Surprise! Bayesian Weighting for De-Biasing Thematic Maps。这篇可视化的文章引入了贝叶斯理论,将不符合预期分布的区域突出显示了,作者认为那个部分的内容更有可视化的价值。然后问题就来了,什么是贝叶斯?阮一峰的博客有简单的介绍,例子比较容易懂:http://www.ruanyifeng.com/blog/2013/12/naive_bayes_classifier.html
关于贝叶斯定理几个解释
P(A|B)是B事件发生的情况下,A事件发生的概率是多少?假设A指代“下雨”,B指代“公交延误”,那么P(A|B)指的就是在公交延误的情形中,下雨的概率是多少。我们可以假定输入的数据集为:
A(下雨)B(公交延误):(1,0),(0,0),(1,1),(1,1),(0,1),(1,0)
那么通过统计计算P(A|B)=2/3,P(B|A)=2/4=1/2。现在让我们来验证定理,P(A|B)=P(B|A)P(A)/P(B)=2/3 与通过统计计算的结果是一致的。
贝叶斯有什么用?
假设数据集非常完备,特别是如今的大数据时代,我们可以收集到近乎完整的样本,这样便可以通过贝叶斯公式进行事件的估计。根据之前的样本和计算结果,我们可以得出,假设今天下雨了,那么公交延误的概率应该是1/2。如果发生的事件非常多的话,贝叶斯可以用做事件分类。
贝叶斯分类器
我们现在扩充集合A和B,A(小雨,大雨,下雪)B(公交延误,地铁延误,轮渡延误,飞机延误),我们称A集合中的子集为Category,我们假设每条数据只能属于一个Category,B中的子集为Feature,贝叶斯分类器的作用就是基于已有的Feature和Category数据,再跟进输入的数据做分析,得出该输入属于哪个Category。
用做训练的数据假定是:
A(小雨),B(公交延误,地铁延误)
A(大雨),B(公交延误,地铁延误,飞机延误)
A(小雨),B(公交延误)
A(小雨),B(地铁延误)
A(大雨),B(地铁延误,飞机延误)
A(下雪),B(公交延误,地铁延误,飞机延误)
于是P(A|B)=P(B1B2...Bn|A)P(A)/P(B1B2...Bn),如果B1B2...Bn之间相互不独立的话,计算是非常麻烦的,于是有人就提出了假设,假设B1B2...Bn之前彼此是相互独立的,基于这种假设的贝叶斯叫朴素贝叶斯:P(A|B)=[P(B1|A)P(B2|A)...P(Bn|A)]P(A)/P(B1B2...Bn)
特殊的例子
如果输入B的值在训练集中没有对应的数据,就需要用正态分布来估计数据的值。让我们看一个新的数据集:A(小雨,大雨,下雪)B(温度,风速,空气质量AQI):
A(小雨)B(25,2,50)
A(小雨)B(22,1,45)
A(小雨)B(27,3,53)
A(大雨)B(20,4,45)
A(大雨)B(19,3,59)
A(下雪)B(18,5,66)
假设现在输入一组数据B(B1,B2,B3)=(24,2,51),求P(A|B),其实就是分别求P(小雨|B),P(大雨|B),P(下雪|B)。根据贝叶斯定理得P(小雨|B)=P(B|小雨)P(A)/P(B)。假定B事件各个部分相互独立,可得P(小雨|B)=P(B|小雨)P(A)/P(B)=[ P(B1|小雨)P(B2|小雨) P(B3|小雨)]P(A)/[P(B1)P(B2)P(B3)],P(B1|小雨)=P(24|小雨)是其中的一个未知量,让我们详细讨论这个量的求解过程。
因为24这个值原数据集中没有,所以就需要用正态分布做估算。现统计原始数据集中小雨的情况,小雨情况的温度的期望为:24.6(平均值估计期望),方差1.187,利用正态分布的公式可求得,温度值为24时,天气为小雨的概率密度是0.285,求解方法如下:
其他几个分量的计算参考上面的公式p(24,小雨)就好了。最后可以分别求出P(小雨|B),P(大雨|B),P(下雪|B)的概率,选择概率最大的做为最后的分类结果。