贝叶斯网络中求值,从特殊到一般:分类、查询、推断
吉布斯采样算法既可以采样一个样本(用于预测),又可以采样一组样本(用于查询)——“根据今天的天气状况,你觉得明天是晴还是雨?

贝叶斯网络分类器

在贝叶斯网络python实现贝叶斯网络推理 贝叶斯网络推断_概率论中,若其余所有结点都有值,仅有一个结点无值,会出现什么情况?

设待定值结点为python实现贝叶斯网络推理 贝叶斯网络推断_python实现贝叶斯网络推理_02,待定值为python实现贝叶斯网络推理 贝叶斯网络推断_概率论_03,设python实现贝叶斯网络推理 贝叶斯网络推断_机器学习_04,则
python实现贝叶斯网络推理 贝叶斯网络推断_概率论_05
其中,python实现贝叶斯网络推理 贝叶斯网络推断_概率论_06表示结点变量python实现贝叶斯网络推理 贝叶斯网络推断_机器学习_07的具体值。 对式(7.47)先由python实现贝叶斯网络推理 贝叶斯网络推断_概率论的结构关系,转化为条件概率,然后,查python实现贝叶斯网络推理 贝叶斯网络推断_概率论的条件概率表即可计算出python实现贝叶斯网络推理 贝叶斯网络推断_概率论_03每一个指定值的python实现贝叶斯网络推理 贝叶斯网络推断_python实现贝叶斯网络推理_11。 这就实现了对待定结点的“查询”,即得到它取各种可能值的概率。

将样本标记python实现贝叶斯网络推理 贝叶斯网络推断_机器学习_12也视为一个结点(地位等同于属性),则依前述方法训练出一个最优贝叶斯网络python实现贝叶斯网络推理 贝叶斯网络推断_python实现贝叶斯网络推理_13,对python实现贝叶斯网络推理 贝叶斯网络推断_机器学习_12进行查询,则可得到
python实现贝叶斯网络推理 贝叶斯网络推断_分类_15
其中,python实现贝叶斯网络推理 贝叶斯网络推断_概率论_16为第python实现贝叶斯网络推理 贝叶斯网络推断_算法_17类标记符号,python实现贝叶斯网络推理 贝叶斯网络推断_python实现贝叶斯网络推理_18,则取使式(7.48)最大的python实现贝叶斯网络推理 贝叶斯网络推断_概率论_16作为python实现贝叶斯网络推理 贝叶斯网络推断_算法_20分类,即实现了贝叶斯最优分类器(7.1 贝叶斯决策论中式(7.13)),分类可视为一种特殊的查询。

贝叶斯网络推断

确定了贝叶斯网络python实现贝叶斯网络推理 贝叶斯网络推断_概率论后,就可用于上述“查询”,现在进一步扩展“查询”,查询一组结点而不只是一个结点,称为“推断”,

在有限的时间内,通常使用“近似推断”,常用吉布斯采样进行“近似推断”,【西瓜书图7.5】描述了吉布斯采样算法,这里再对它的重点、难点加以说明。

(1)以前待预测样本表示为python实现贝叶斯网络推理 贝叶斯网络推断_概率论_22python实现贝叶斯网络推理 贝叶斯网络推断_python实现贝叶斯网络推理_23,其中,属性python实现贝叶斯网络推理 贝叶斯网络推断_概率论_24已知,求标记python实现贝叶斯网络推理 贝叶斯网络推断_python实现贝叶斯网络推理_25?现在将python实现贝叶斯网络推理 贝叶斯网络推断_python实现贝叶斯网络推理_23中全视为变量,有的变量已知(证据),有的变量未知(待查询),将证据变量和待查询变量分开,各自排列,即样本为
python实现贝叶斯网络推理 贝叶斯网络推断_分类_27
其中,python实现贝叶斯网络推理 贝叶斯网络推断_机器学习_28为证据变量,python实现贝叶斯网络推理 贝叶斯网络推断_概率论_29为待查询变量,写成集合形式则为python实现贝叶斯网络推理 贝叶斯网络推断_分类_30

(2)以大写字母表示变量,小写字母表示变量的值,粗体表示对应的向量。 则查询问题可以表述为: 证据为python实现贝叶斯网络推理 贝叶斯网络推断_算法_20,查询出现python实现贝叶斯网络推理 贝叶斯网络推断_概率论_32的概率为多少(如,阴天(证据)下雨(查询)的概率多大)?即求python实现贝叶斯网络推理 贝叶斯网络推断_算法_33

(3)通过频率估计上述概率,而频率又是通过采样后计数来获得,求python实现贝叶斯网络推理 贝叶斯网络推断_算法_33只需要在条件python实现贝叶斯网络推理 贝叶斯网络推断_机器学习_35下采样,设采样总数为python实现贝叶斯网络推理 贝叶斯网络推断_算法_36,其中python实现贝叶斯网络推理 贝叶斯网络推断_算法_37的样本数为python实现贝叶斯网络推理 贝叶斯网络推断_分类_38个,则
python实现贝叶斯网络推理 贝叶斯网络推断_概率论_39

(4)在哪儿去采样?容易想到在数据集python实现贝叶斯网络推理 贝叶斯网络推断_分类_40中去采样,或者直接将数据集python实现贝叶斯网络推理 贝叶斯网络推断_分类_40视为采样集,统计其中满足条件python实现贝叶斯网络推理 贝叶斯网络推断_机器学习_35python实现贝叶斯网络推理 贝叶斯网络推断_算法_36python实现贝叶斯网络推理 贝叶斯网络推断_分类_38,如果数据集python实现贝叶斯网络推理 贝叶斯网络推断_分类_40超大,你当然可以这样做。 现在,我们换个思路来考虑,通过数据集python实现贝叶斯网络推理 贝叶斯网络推断_分类_40已训练出一个贝叶斯网python实现贝叶斯网络推理 贝叶斯网络推断_分类_47,转化到在贝叶斯网python实现贝叶斯网络推理 贝叶斯网络推断_概率论上采样,然而,贝叶斯网python实现贝叶斯网络推理 贝叶斯网络推断_概率论并不是样本空间(或样本集)如何在其上采样?贝叶斯网python实现贝叶斯网络推理 贝叶斯网络推断_概率论有个神奇的功能:指定结点python实现贝叶斯网络推理 贝叶斯网络推断_概率论_03,在固定其他所有结点值的情况下,可以求出指定结点的条件概率分布python实现贝叶斯网络推理 贝叶斯网络推断_算法_52,即式(7.47)的“查询”功能,由该概率即可“采样”出该结点的值,该值与其他所有结点的值共同组成一个样本,将其视为采样得到的样本,它实际上,是借助贝叶斯网python实现贝叶斯网络推理 贝叶斯网络推断_概率论通过局部python实现贝叶斯网络推理 贝叶斯网络推断_概率论_03采样而“生成”一个样本python实现贝叶斯网络推理 贝叶斯网络推断_算法_20。 这就是吉布斯采样算法【西瓜书图7.5】中的第7、第8句。

(5)【西瓜书图7.5】吉布斯采样算法由两层循环来 描述:外层for循环(第3句)产生“一组样本”,内层for循环(第4至第10句)产生样本(产生“一组属性”),即对python实现贝叶斯网络推理 贝叶斯网络推断_概率论_56循环。

(6)【西瓜书图7.5】算法中第8句涉及到已知概率分布,如何进行采样的问题。 这里以离散随机变量进行说明:例如,随机变量python实现贝叶斯网络推理 贝叶斯网络推断_分类_57可取值为python实现贝叶斯网络推理 贝叶斯网络推断_概率论_58,已知python实现贝叶斯网络推理 贝叶斯网络推断_python实现贝叶斯网络推理_59是指python实现贝叶斯网络推理 贝叶斯网络推断_分类_57取每个值的概率已知,如,python实现贝叶斯网络推理 贝叶斯网络推断_python实现贝叶斯网络推理_61

现在以python实现贝叶斯网络推理 贝叶斯网络推断_python实现贝叶斯网络推理_59为已知的概率分布,要求采样1000个样本,先解决一个样本的采样问题,再用for循环可以得到任意多个样本。

采一个样本方法:

  • 将区间python实现贝叶斯网络推理 贝叶斯网络推断_机器学习_63分为三段:python实现贝叶斯网络推理 贝叶斯网络推断_分类_64
  • 计算机中随机数发生器产生的随机数是均匀分布的,即可用程序产生区间python实现贝叶斯网络推理 贝叶斯网络推断_机器学习_63中均匀分布的随机数python实现贝叶斯网络推理 贝叶斯网络推断_概率论_66,如:python实现贝叶斯网络推理 贝叶斯网络推断_python实现贝叶斯网络推理_67
  • 判断随机数python实现贝叶斯网络推理 贝叶斯网络推断_概率论_66所在的区间段:若落入python实现贝叶斯网络推理 贝叶斯网络推断_分类_69,则取样本python实现贝叶斯网络推理 贝叶斯网络推断_分类_70;若落入python实现贝叶斯网络推理 贝叶斯网络推断_概率论_71,则取样本python实现贝叶斯网络推理 贝叶斯网络推断_python实现贝叶斯网络推理_72;若落入python实现贝叶斯网络推理 贝叶斯网络推断_算法_73,则取样本python实现贝叶斯网络推理 贝叶斯网络推断_分类_74

(7)吉布斯采样算法是从已有的python实现贝叶斯网络推理 贝叶斯网络推断_python实现贝叶斯网络推理_75出发采出python实现贝叶斯网络推理 贝叶斯网络推断_分类_76,然而开始时没有这个“已有”,而是胡乱地初始化一个python实现贝叶斯网络推理 贝叶斯网络推断_python实现贝叶斯网络推理_77作为“已有”,即【西瓜书图7.5】算法中第2句,那么,问题来了:这个python实现贝叶斯网络推理 贝叶斯网络推断_python实现贝叶斯网络推理_77是否合适?首先,这个python实现贝叶斯网络推理 贝叶斯网络推断_python实现贝叶斯网络推理_77应该是在python实现贝叶斯网络推理 贝叶斯网络推断_机器学习_80的取值范围内的,其次是要能“取到”该值,这个不能保证,因为该值有可能是“小概率事件”。 好在数学上证明了不需要保证这一点,这就是【西瓜书p.161】所说的采样形成的“马尔可夫链”收敛于平稳分布。 因此,【西瓜书图7.5】算法中对采样计数(第3句)应该改造一下:斩掉一段不太平稳的“链”头再开始计数。

(8)吉布斯采样算法既可以采样一个样本(用于预测),又可以采样一组样本(用于查询),我们通过一段对话来理解:

Q:“根据今天的天气状况,你觉得明天是晴还是雨?”——今天的天气状况【证据】,明天是晴还是雨【预测】。

J:“我觉得明天是晴天. ”——J用吉布斯采样算法采了一个样本,发现该样本是晴【预测结果】。

Q:“你预报的准确性如何?”

J:“让我再想想. ”——J用吉布斯采样算法采出一组样本,计算明天是晴还是雨各自的频率【近似估算后验概率】。

Q:“其实,我想知道明天是雨天的可能性有多大,因为我明天要举办露天婚礼。 ”——明天是雨天的可能性【查询】。

J:“明天是雨天的概率是60%. ”——根据刚计算出的频率作出近似推断【查询结果】。

综上,近似推断有如下步骤:

(1)从现实物理世界中采样得到训练集python实现贝叶斯网络推理 贝叶斯网络推断_分类_40

(2)以评价函数最小化为目标即python实现贝叶斯网络推理 贝叶斯网络推断_分类_82,搜索得到一个贝叶斯网络python实现贝叶斯网络推理 贝叶斯网络推断_分类_47

(3)从python实现贝叶斯网络推理 贝叶斯网络推断_概率论及证据出发,使用吉布斯算法采样,得到一个样本集。注:这里与其说是“采样”,不如说是用“样本制造机”来“制造”样本,“样本制造机”有多种多样,但它应保证“制造”出的“样本集”是反映样本空间的特性(即统计频率能反映样本空间中的概率),这里的“样本制造机”为训练好的贝叶斯网及吉布斯算法。

(4)对产生(采样)得到的样本集进行分门别类“计数”,得到待查询值的概率(近似值),即式(7.49)。

其中,(1)与(2)可以视为生产一个产品python实现贝叶斯网络推理 贝叶斯网络推断_概率论,(3)与(4)视为使用产品python实现贝叶斯网络推理 贝叶斯网络推断_概率论,显然,产品可以发布给许多用户使用。