1.1摘要
之前我们讨论了朴素贝叶斯分类。朴素贝叶斯分类有一个限制条件,就是特征属性必须有条件独立或基本独立(实际上在现实应用中几乎不可能做到完全独立)。当这个条件成立时,朴素贝叶斯分类法的准确率是最高的,但不幸的是,现实中各个特征属性间往往并不条件独立,而是具有较强的相关性,这样就限制了朴素贝叶斯分类的能力。这一篇文章中,我们讨论贝叶斯分类中更高级、应用范围更广的一种算法——贝叶斯网络(又称贝叶斯信念网络或信念网络)。
考虑一个例子
考虑一个使用朴素贝叶斯分类实现SNS社区中不真实账号的检测例子。在朴素贝叶斯分类的解决方案中,做了如下假设:
i、真实账号比非真实账号平均具有更大的日志密度、各大的好友密度以及更多的使用真实头像。
ii、日志密度、好友密度和是否使用真实头像在账号真实性给定的条件下是独立的。
但是,上述第二条假设很可能并不成立。一般来说,好友密度除了与账号是否真实有关,还与是否有真实头像有关,因为真实的头像会吸引更多人加其为好友。因此,我们为了获取更准确的分类,可以将假设修改如下:
i、真实账号比非真实账号平均具有更大的日志密度、各大的好友密度以及更多的使用真实头像。
ii、日志密度与好友密度、日志密度与是否使用真实头像在账号真实性给定的条件下是独立的。
iii、使用真实头像的用户比使用非真实头像的用户平均有更大的好友密度。
于是,可以用下面的图来表示这种描述
我们仔细看一下这个图,特别对照一下第二条:如果账号是真实的话,那么日志密度与好友密度(这两个结点之间无连线),日志密度与头像是否真实(这两个结点之间也没有连线。)是条件独立的。而头像是否真实与好友密度(这两个结点之间有连线存在)是有依赖关系的。
因此,实际上,上述假设更接近实际情况,但问题随之也来了,由于特征属性间存在依赖关系,使得朴素贝叶斯分类不适用了。既然这样,去寻找另外的解决方案。
我们再次把关注这张图。
这是一个有向无环图(DAG),其中每个节点代表一个随机变量,而弧则表示两个随机变量之间的联系,表示指向结点影响被指向结点。不过仅有这个图的话,只能定性给出随机变量间的关系,如果要定量,还需要一些数据,这些数据就是每个节点对其直接前驱节点的条件概率,而没有前驱节点的节点则使用先验概率表示。
例如,通过对训练数据集的统计,得到下表(R表示账号真实性,H表示头像真实性):
纵向表头表示条件变量,横向表头表示随机变量。
上表为真实账号和非真实账号的概率,而下表为头像真实性对于账号真实性的概率。
这两张表分别为“账号是否真实”和“头像是否真实”的条件概率表。
有了这些数据,不但能顺向推断,还能通过贝叶斯定理进行逆向推断。例如,现随机抽取一个账户,已知其头像为假,求其账号也为假的概率。
也就是说,在仅知道头像为假的情况下,有大约35.7%的概率此账户也为假。如果觉得阅读上述推导有困难,请复习概率论中的条件概率、贝叶斯定理及全概率公式。如果给出所有节点的条件概率表,则可以在观察值不完备的情况下对任意随机变量进行统计推断。上述方法就是使用了贝叶斯网络。
1.2贝叶斯网络的定义及性质
有了上述铺垫,我们就可以正式定义贝叶斯网络了。
一个贝叶斯网络定义包括一个有向无环图(DAG)和一个条件概率表集合。
DAG中每一个节点表示一个随机变量,可以是可直接观测变量或隐藏变量,而有向边表示随机变量间的条件依赖;条件概率表中的每一个元素对应DAG中唯一的节点,存储此节点对于其所有直接前驱节点的联合条件概率。
贝叶斯网络有一条极为重要的性质,就是我们断言每一个节点在其直接前驱节点的值制定后,这个节点条件独立于其所有非直接前驱前辈节点。
这条特性的重要意义在于明确了贝叶斯网络可以方便计算联合概率分布。
一般情况先,多变量非独立联合条件概率分布有如下求取公式:
而在贝叶斯网络中,由于存在前述性质,任意随机变量组合的联合条件概率分布被化简成
其中Parents表示xi的直接前驱节点的联合,概率值可以从相应条件概率表中查到。
回想一下朴素贝叶斯的独立假设,实际上最直接的体现是在计算当中,运用此性质,它极大的简化了计算。同样的,这条性质也会极大的简化计算。
贝叶斯网络比朴素贝叶斯更复杂,而想构造和训练出一个好的贝叶斯网络更是异常艰难。但是贝叶斯网络是模拟人的认知思维推理模式,用一组条件概率函数以及有向无环图对不确定性的因果推理关系建模,因此其具有更高的实用价值。
1.3贝叶斯网络的构造及学习
构造与训练贝叶斯网络分为以下两步:
1、构造网络,确定随机变量间的拓扑关系,形成DAG。这一步可以由领域专家完成或者由数据导出。(在这里,我们暂时只考虑由领域专家构造网络)
2、训练贝叶斯网络。如果不训练的,我们只能知道定性的网络,而不能定量。实际上这一步也就是要完成条件概率表(CPT表)的构造,如果每个随机变量的值都是可以直接观察的,像我们上面的例子,那么这一步的训练是直观的,方法类似于朴素贝叶斯分类。但是通常贝叶斯网络的中存在隐藏变量节点(即存在一些隐藏的影响。比如我们知道吸烟可以导致肺癌,但是可能还会有其他很多我们意想不到的因素也会导致肺癌),那么训练方法就会比较复杂。
在这里,我们假设DAG网络已经由专家构造了。而我们所需要的就是去训练这个DAG网络,也就是去调整CPT表里面的参数,最优化联合条件概率。
在这里,我们使用梯度下降法来训练贝叶斯网络。这里简单介绍一下梯度下降法。
想象一个等高图模型,我们为了求该登高模型的最大值,我们该怎么做呢?一个很自然的像噶就是我们先随便在山上找一个点,然后找到该点的梯度,然后沿着梯度方向我们前进一个固定步长,然后继续求梯度,接着继续在沿梯度方向前进一个固定步长,然后一直迭代。直到出现下面两种情况之一时停止迭代。
第一:到了某一点发现梯度已经为0,那就证明该点已经到了最高值;
第二:在沿着该点的梯度方向前进了步长之后,发现高度没有发生明显的变化,这个变化很小,小于一个既定的阀值,纳闷我们也认为找到了局部最高值。
因此,把这种方法应用在训练贝叶斯信念网络上时,算法执行流程如下:
1、初始化,随机CPT表中的项目;
2、求Pw(D)在w初始值时的梯度。(由于D是一个数据样本集合,所以该梯度可以分解为每一个样本在w初始值时的梯度之和。说白了就是对所有的CPT条目都调用公式,这样就可以得到每个条目在某个样本下的梯度。对样本集合中的每个样本我们都经过上面的计算,样本集合D中每个CPT条目的梯度是所有样本梯度的和。把所有条目的梯度组合在一起,就是整个Pw(D)的梯度。注意这里的Pw(D)的梯度不是一个值,而是一个所有CPT条目的分布。)
3、更新权重;
4、规格化权重;
5、继续迭代直至结束。
OK,到这里整个算法流程就讲解完了。这里主要是拉通整个流程,算法省略了很多具体细节。而且,也不是说训练贝叶斯网络就一定要用梯度下降法。
实际上,可以用因果关系来解释贝叶斯网络。
善有善报,恶有恶报。这一句可以理解为DAG图的构造
不是不报,时候未到。这一句可以理解为条件概率表(不报的原因是时候未到,即概率)
贝叶斯网络的实际例子
怎么通俗易懂地解释贝叶斯网络和它的应用?
性能如何?
贝叶斯网络已经广泛于临床,生物,征信等领域。其强大之处在于两点
1.贝叶斯网络最强大之处在于从每个阶段结果所获得的概率都是数学与科学的反映,换句话说,假设我们了解了足够多的信息,根据这些信息获继而得统计知识,网络就会告诉我们合理的推断。
2.贝叶斯网络最很容易扩展(或减少,简化),以适应不断变化的需求和变化的知识。