在整个项目中,我们将使用在inference.py中定义的DiscreteDistribution类来建模信念分布和权重分布。这个类是内置python dictionary类的扩展,其中键是分布中不同的离散元素,相应的值与该元素的信念或权重成比例。
首先,实现normalize方法,它将分布中的值归一化为1,但保持值的比例不变。使用total方法查找分布中的值之和。对于空分布或所有值都为零的分布,不执行任何操作。请注意,此方法直接修改分布,而不是返回新分布。
其次,实现抽样sample方法,该方法从分布中抽取一个样本,其中一个键被抽样的概率与其对应的值成比例。假设分布不为空,并非所有值都为零。请注意,在调用此方法之前,不必对分布进行归一化。您可能会发现python的内置random.random()函数对于这个问题很有用。
这个问题没有autograder测试,但是可以很容易地检查实现的正确性。我们提供了python doctest作为起点,您可以添加更多测试并实现自己的其他测试。您可以使用以下命令运行doctests:
python -m doctest -v inference.py
注意,根据sample方法的实现细节,某些正确的实现可能不会通过提供的doctest。为了彻底检查sample方法的正确性,您应该绘制许多示例,并查看每个键的频率是否收敛到与其对应值成比例。
# inference.py
# ------------
# Licensing Information: You are free to use or extend these projects for
# educationa