贝叶斯分类器是一种基于贝叶斯公式的分类器,是一种基于统计的分类器,它计算在某一特征向量的前提下,各种分类可能出现的概率.把概率最大的那个类当作最终的分类结果.贝叶斯分类器分为2种:朴素贝叶斯分类器,贝叶斯网络.
这篇博克简单介绍下这两种分类器原理.
朴素贝叶斯分类器
贝叶斯公式如下
其中X代表特征向量, C代表分类.我们的目标就是找出使得这个后验概率最大的那个类.
其中需要注意的是X中的各个特征分量是分布独立的.这样就有:
这些概率都可以从样本中很快统计出来,从而很容易计算出结果。
朴素贝叶斯分类器一个很经典的应用就是用来进行垃圾邮件过滤。每一封邮件都包含了一系列特征词,这些特征词就构成特征向量X.我们只需要计算在该特征向量出现的前提下此邮件为垃圾邮件的概率就可以进行判别了。
实际上算法的基础就是词频的计算,这个可是mapreduce这种框架的强项啊。两轮MR之后就可以得出结果。
贝叶斯网络
朴素贝叶斯分类器工作必须有一个前提假设,特征属性之间的关系必须是独立的,只有在这个假设前提下,朴素贝叶斯分类器才能工作的比较好。但是在现实世界中,这种假设并不成立。所以另一种算法就被提出-贝叶斯网络。
贝叶斯网络的定义并不复杂,一个贝叶斯网络就是一个有向无环图,图中的每一个节点代表着一个随机变量(可以理解为样本的特征属性),对应着每一个节点贝叶斯网络还有一张条件概率表(CPT)。CPT表明了子节点对父节点的条件概率,也就是。对于没有父子关系的节点们,他们之间是相互独立的。所以就有:
这个需要注意的是,如果求得是部分变量的联合概率分布,那么就必须基于上述公式进行一个全概率公式的变换,例子:
如果所有的属性的父节点都是X1(当然除了自己),那么上述公式就有:
这么说可能比较晦涩,举个例子画个图:
贝叶斯网络中有些变量(节点)是可以被直接观测得到的,这些变量是可以在数据集中体现出来的,这些变量可以称之为观察变量.而有些变量是无法直接观测到,无法直接在数据集中体现的,这些变量称之为隐性变量.这个应该很好理解,举个例子,假如在医院的所有的医疗记录中,只存在三个变量,高血压,肥胖,急性肠炎.肥胖可以导致高血压,它是高血压的父节点,这很明显,但我们不能只考虑这三个变量构成的网络.因为急性肠炎可能导致抵抗力下降,抵抗力下降也会导致高血压.(好牵强的例子,大家忍忍吧,实在是医学知识匮乏).尽管医院的记录中并不包含任何营养不良的医疗记录,但是它确实是高血压的一个可能原因,我们需要把它作为一个变量在贝叶斯网络中考虑进来,这样的变量就是隐藏变量,我觉叫间接变量可能更好。
1)贝叶斯网络推理
贝叶斯网络一旦购建好,我们就可以计算在给定一些变量的情况下,查询处任意变量组合的概率,这被称之为贝叶斯网络推理,也是贝叶斯网络的应用之所在.贝叶斯网络推理算法现在已知是一个N-P问题.下面就简单分析一下如何来推理[例子来源于文献4]
上图是一个简单的贝叶斯网路,h1,h2隐藏变量,o1,o2是可观测变量,所有这些变量要么是0,要么是1。我们推理的目的就是在给定其它变量的观测值时推理出某些变量目标(也许是隐藏变量)的值的概率分布。本例中,就有
根据最后的推导结果,就可以根据CPT得出最后的概率分布.
注意P(o1,o2)的推导,全概率公式.
当然这是最直接的算法,算法复杂度较高,现在比较常用的实际上是连接树算法,接口算法等等,有很多这方面的论文讨论这个.
2)贝叶斯网络的构造
上面谈到了贝叶斯网络的使用,这里再讨论一下贝叶斯网络的构造.贝叶斯网络的构造需要构造两个方面,一个是拓扑结构,另外一个是CPT.
拓扑结构的构造有两种方法:
第一借助于领域专家帮忙构造,由该领域专家来设计网络拓扑结构.
第二通过算法来构造,比如基于结构空间的贪婪搜索等等.有兴趣请参考相关论文
CPT的构造需要通过样本学习来构造,下面就简单介绍一下梯度下降算法构造CPT.
先有下面的定义:
代表CPT中的一个项目,表示的概率是在给定它的父亲们等于它的第K个可能的值(可能是一种组合)时, 取它的第j个值的概率.举个例子来说,对于上面的例图Fingure 6.11,对于LC的CPT,如果LungerCancer是第三个特征属性,CPT就有下面的对应:
为了构造CPT,我们需要有样本集D,包含了m个样本,每个样本完备得包含了所有特征属性.
我们的目的就是最大化,也就是最大化在目前CPT的条件概率下,出现当前D样本分布的概率.那么我们的目标就变成了求函数的最优解问题.于是考虑使用梯度下降法(也就是所谓的爬山).我们想象一个等高图模型,我们为了求该登高模型的最大值,我们该怎么做呢?一个很自然的想法就是我们先随便在山上找一个点,然后找到点的梯度,沿着梯度方向我们前进一个固定步长,然后继续求梯度,继续再沿着梯度方向前进一个固定步长,然后一直循环.那么什么时候结束呢?两种情况下:
第一到了某一点梯度发现已经为0.那就证明该点已经到了最高值
第二在沿着该点的梯度方向前进了步长之后,发现高度没有发生明显的变化,这个变化很小,小于一个既定的阈值.那么我们也认为找到了局部最高值.
这种方法可以求到局部最优解,但无法确保得到全局最优解。
第一 随机CPT表中的条目
第二 求在w初始值时的梯度,由于D是一个数据样本集和,所以该梯度可以分解为每一个样本在w初始值时的梯度之和.经过一系列概率公式变化(参见文献二),就可以得到如下公式:
所以样本的梯度值就很容易求出来了,注意上面公式的最后结果分子不是1,就是0.因为针对某一个样本,变量和其父亲出现某种分布的概率要么是0,要么是100%.有了上述公式,我们针对贝叶斯网络的所有CPT条目都调用上述公式,就可以得到每个条目在某个样本下的梯度.对样本集合中的每个样本我们都经过上面的计算,样本集合D中每个CPT条目的梯度是所有样本梯度的和.把所有条目的梯度组合在一起,就是整个的梯度.注意这里的的梯度不是一个值,而是一个所有CPT条目的分布.
第三 由于需要有一定的约束条件
所以CPT条目的分布,也就是的分布需要投射到一个平面上,因此需要一个平面投射转化成
具体算法参加下图
贝叶斯网络的一个应用场景就是专家故障诊断系统,用来评估在故障出现的情况下各种故障原因的概率分布.
参考文献:
[1] 点到平面的投影算法http://blog.csdn.net/coollen_mmx/article/details/4200489
[2]Local learning in probabilistic networks with hidden variables
[3]http://www.cnblogs.com/leoo2sk/archive/2010/09/18/bayes-network.html
[4]离散动态贝叶斯网络的直接计算推理算法
[5]Adaptive Probabilistic Networks with Hidden Variables