代码改变世界

贝叶斯

2014-08-22 22:22  郭志通  阅读(1074)  评论(0编辑  收藏  举报

贝叶斯定理

如果已经知道P(B|A),计算P(A|B)的时候就要用到贝叶斯定理了:

证明也非常简单,直接用条件概率的定义就可以了:

这里补充一下:P(B|A)是指在A发生的条件下B发生的概率。

朴素贝叶斯分类

朴素贝叶斯分类是一种有监督的学习方法,也就是说我们会收集一些样本,每个样本有一些特征并被标示属于某个类别,然后在此基础上我们对新的数据的类别进行预测,而预测肯定是去找一个最有可能的类别:

现在麻烦来了:我们通常是没有很多Fa、Fb、Fc同时出现的样本(大部分情况下为0),那么这个概率就没办法去计算了,怎么办?在样本中肯定有很多Ci出现的,如果将Ci作为条件的话不就有很多样本了?根据贝叶斯定理转换得到:

对于每个类别等式右边的分母都是一样的,对我们选最大值没有影响,现在只需要考虑分子部分即可。这里可以假设特征之间是互相独立的来进一步简化模型,得到:

这几项都可以从样本中统计出来,这样就可以得到结论了。

贝叶斯网络 

在朴素贝叶斯中我们做了简化做了独立性的假设,而实际中特征之间独立的例子还是比较少的,那么这时候就用贝叶斯网络(信念网络)来描述特征之间的关系:

贝叶斯网络是一个有向无环图,节点代表一个特征,边表示特征之间的依赖关系。那么如何来理解这个以来关系,对于非独立的变量的联合概率有:

但是在贝叶斯网络中,节点的概率只和父节点有关系(与其他节点是独立的),比如在上面的例子中有:

等式右边的值是需要通过实际的值统计得到的。在实际的例子中,每个节点的“父节点”不会很多,也就是说计算概率的复杂度不会特别高(计算之前需要统计好条件概率表)。

举个例子,Fa:

Fa=T Fa=F
0.4 0.6

Fb:

  Fa=T Fa=F
Fb=T 0.3 0.7
Fb=F 0.7 0.3

Fc:

    Fc=T Fc=F
Fb=F Fa=F 0 1
Fb=F Fa=T 1 0
Fb=T Fa=F 1 0
Fb=T Fb=T 1 0

那么此时计算P(Fa=T|Fc=T)的概率,过程如下:

这个是简单的模型,用这种方法计算还能接受,当模型变大变复杂的时候就不行了,需要想其他办法。

变量消元法

用枚举法求解时会有重复的计算,比如有贝叶斯网络如下:

通过枚举法计算时需要将b、a展开,得到:

变量消元法的目的就是去除枚举法中的重复计算,当然算法的前提也是需要条件概率表,如下:

下面我们讲条件概率表进行合并,比如P(j|a)、P(m|a)这种条件相同的可以直接合并:

P(a|b,E)、P(j|a)P(m|a)这种有公共变量的条件表合并时,有点像矩阵乘法:

根据前面的式子需要对上面的结果中不相同的a进行求和:

接着需要将变量b合并,与上面的P(a|b,E)、P(j|a)P(m|a)合并过程相同:

然后然后需要将上面结果中不同的b进行合并:

最后将E合并得到最后的结果:

Variable Elimination中计算的顺序决定了计算的复杂度,而求解最佳顺序是NP问题,这里可以使用启发式搜索得到一个比较优的解。在变量很多、网络复杂的情况下,精确计算开销比较大,而且在很多情况下我们只需要一个大致的值,那么此时我们可以通过采样的方法得到一个大致准确的值。

MCMC

蒙特卡洛算法名字很高大上,其实就是随机算法)在很多场景都有广泛的应用(尤其是确定性全服巨复杂或者无解的时候),甚至在原子弹的制造中也发挥了巨大作用。除了原子弹,另一个比较简单点的例子就是用随机算法来求pi的值:

自然MCMC就是指用马尔可夫链(MC实现的蒙特卡洛(MC)算法。马尔可夫性质是概率论中的一个概念,是指未来只与现状相关,与以前无关。也就是:

Markov Chain是一种状态有限、时间离散情况下的Markov Process,其他类型的Markov Process有:

  1. Harris Chain:状态无限、时间离散
  2. Continuous-time Markov process:状态有限、时间连续
  3. Wiener process:状态无限、时间连续