cs188Inference in Bayes Nets(贝叶斯网络的推理)

Question1(3 points):Bayes Net Structure

该问题需要构建一个贝叶斯网络,在所给代码压缩包里已经给出提示:在该贝叶斯网中有五种变量(x位置,y位置,食物屋,鬼屋和观测值)。我们需要命名这些变量,填充贝叶斯网的边来构造此贝叶斯网络。
首先设置每个’ variableDomainsDict[var] = values ‘,其中’ values ‘是’ var '可能的赋值集。这些在所给文件顶部已经有常量定义。所以对应写出
在这里插入图片描述

之后构建边,根据题目给出的关系可以得出,边包括(x位置->鬼屋)、(x位置->食物屋)、(y位置->食物屋)、(y位置->鬼屋),将这些边添加到文件已经定义的边的集合edges中。
在这里插入图片描述

定义观测值,根据提示知道可以利用两个for循环来构建,之后与上述做法相似,将对应的边添加到边的集合中。
在这里插入图片描述

Question2(1 points):Bayes Net Probabilities

在该问题中我们需要使用在上一个问题中构建的贝叶斯网络,指定控制Y位置变量的因素,给出y位置变量的先验概率。
仿照文件已经给出的fillXCPT函数完成fillYCPT函数,但有一点不同的是Y位置有四个方向值,概率可以使用从上面中导入的PROB_常量,在文件中已经给出概率值。
在这里插入图片描述

Question 3(5 points):Join Factors

问题三需要我们在factorOperations.py中实现joinFactors函数。它接受一个Factors列表,并返回一个新的Factor,其概率是输入Factors的相应行的乘积。joinFactors可以用作乘积规则,具体实现形式为P(X|Y)*P(Y=P(X,Y)。
我们已经知道,贝叶斯方法的特点是用概率去表示所有形式的不确定性,学习或其它形式的推理都用概率规则来实现。贝叶斯学习的结果表示为随机变量的概率分布,贝叶斯定理将事件的先验概率与后验概率联系起来。
在本文件中根据提示可以得到输入的factor是一系列factor。我们应该计算非条件变量和条件变量的集合,返回一个新因子,该因子包含这些变量,其概率是输入因子的相应行的乘积。我们可以假设所有输入因子的variableDomainsDict都是相同的,因为它们来自同一个BayesNet。joinFactors只允许unconditionedVariables出现在一个输入因子中。除此之外,接受assignmentDict作为输入的Factor方法(如getProbability和setProbability)可以处理赋值比该因子中更多变量的assignmentDict。
在这里插入图片描述

Question4(4 points):Eliminate

问题四需要我们在factorOperations.py中实现elimiate函数。参数列表是一个Factor和一个变量,要实现消除并返回一个不包含该变量的新Factor的功能。即对Factor中只有被消除的变量值不同的所有项进行求和。
函数可以实现的功能是:排除概率表中的变量,即
在这里插入图片描述

通过提示,我们要注意的是无条件变量和有条件变量。参数列表输入的消除变量必须是非条件变量。
实现思路:
Factors存储的是原始BayesNet的variableDomainsDict,返回的Factor应该与输入Factor具有相同的variableDomainsDict。函数实现中计算非条件变量和条件变量的集合,通过消除变量得到因素。出现输入消除变量的行与匹配其他变量赋值的行相加即可实现。
代码实现如下:
在这里插入图片描述

Question5(4 points):Normalize

问题五需要在factorOperations.py中实现normalize函数。即归一化Factor。将一个Factor作为输入并对其进行标准化,对Factor中的所有项进行缩放,使Factor中所有项的和为1。如果输入因子中的概率和为0,则应该返回None。
归一化因子的条件变量集由输入因子的条件变量以及输入因子的任何在其定义域中只有一个条目的非条件变量组成。在具体实现时,我们可以认为如果变量的域中只有一个因素,我们假设它在域中只有这一个变量。
实现思路:
(1) 首先对Factor调用getAllPossibleAssignmentDicts函数进行求和,加入特判,如果为0,则返回None,否则继续。
(2) 获取Factor中的条件变量和非条件变量,对于非条件变量的副本。
(3) 如果它域中的因素为1,则加入到条件变量集中,并从非条件变量中去除。
(4) 最后一步重新整合NewFactor,归一设置其概率和为1,最终返回NewFactor。
实现代码:
在这里插入图片描述

Question 6(4 points):Variable Elimination

问题六需要我们在inference.py中实现inferenceByVariableElimination函数。函数实现上述问题功能的整合,最终使用BayesNet、查询变量列表等返回归一化的概率表。
根据提示,算法实现应该按照消除顺序遍历隐藏变量,执行连接并消除该变量,直到只剩下查询变量和证据变量。枚举推理首先连接所有变量,然后消除所有隐藏变量。相反,变量消除通过迭代所有隐藏变量来交叉连接和消除,并在执行下一个隐藏变量之前对单个隐藏变量执行连接和消除。
实现思路:
(1) 首先通过调用BayesNet.getallcptswitheevidence()函数返回所有条件概率表。
(2) 对于eliminationOder中的变量,我们使用joinFactorsByVariable来联接包含变量的所有因素。
(3) 如果当前Factor中的无条件变量的因素只有一个,调用eliminate函数将变量排除。将新生成的Factor加入到概率表中。
(4) 最终调用normalize函数返回一个归一化的概率表。

代码实现:
在这里插入图片描述

Question1~6结果:

在这里插入图片描述

Question1、2的主要问题是构建贝叶斯网络并给出变量的先验概率。这两个问题并无难点主要是贝叶斯网络的实际实现问题,根据文件中给出的食物屋、鬼屋的变量信息即可完成。贝叶斯网络边缘化,标准化的实现。代码实现并无难度,重要的在于贝叶斯网络的理解上。归一化的核心在于对变量域中因素的考虑,如果变量域中因素的个数为1,我们将变量认为是有条件变量,添加到有条件变量集中,并从无条件变量集中去除。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值