我正试图围绕贝叶斯网络的采样(现在简单的未经优化的先前采样)。据我所知,这个想法是产生有限数量的样本,看看它们如何通过网络传播。我不明白,为什么这个过程需要一个随机数生成器。
假设您有一个带有条件概率分布(CPD)的随机变量节点,如下所示:
| Color | P(Color) |
|------------------|
| Red | 0.1 |
| Green | 0.2 |
| Blue | 0.7 |
然后我可以找到的介绍说,对于你想要采取的每个样本,你应该调用 random() - 函数,例如 [0.0,1.0)中的某些内容,然后检查哪个子区间红色:[0.0,0.1),绿色:[0.1,0.3)< / strong>或蓝色:[0.3,1.0] 它会下降。
我的问题是,为什么甚至打电话给随机数发生器?毕竟,你的概率就在你的面前。如果您提前做出决定,想要创建一个 n 样本数量,那么 0.1 * n 样本就不能为红色, 0.2 * n 样品为绿色, 0.7 * n 样品为蓝色?对于具有CPD的子节点,您可以根据它们各自的条件概率分割所有红色,绿色和蓝色样本,同样不使用随机数生成器。
这仍然是一个近似值,因为你还没有推理完整的联合概率分布。并且在极限情况下,这仍应接近 n - >的正确条件概率。无限,不应该吗?
答案 0 :(得分:0)
你是对的,你不需要随机抽样。通常,如果图形不是很大,您可以计算确切的rigth答案(例如通过变量消除)。然而,在实践中,概率模型通常非常复杂。变量消除等算法可能对它们来说太慢了。采样方法是一种近似算法的方法,通过重复生成随机数来产生答案。考虑到你可能有很多节点和边缘,需要计算它们之间的概率来回答,例如P(颜色=蓝色,NodeB = value1,......等等)。该解决方案可以是指数时间计算(取决于网络的大小)。
为什么在抽样中生成随机数?您需要随机,因为如果没有随机选择样本,它可能会以某种方式存在偏差。您需要确保数据代表人口,并且通过随机数生成器来实现此目的。
答案 1 :(得分:0)
以下是Hernan C. Vazquez的评论,他在第一个答案的背景下从交换中获取。在这次交流中,他的评论回答了我原来的问题,所以我想我会把它们作为答案发布在这里。
您需要随机,因为如果没有随机选择样本,它可能会以某种方式存在偏差。您需要确保数据代表人口,并且通过随机数生成器来实现此目的。
换句话说,你可以有每个0.5的头或尾。如果我想取2个样本(n = 2),并且我使用0.5 * n那么我每次出现头部或尾部时都是相反的,P(head | tail)= 1,反之亦然。而且这不是代表性的样本,因为P(head | tail)= 0.5。你正在改变游戏规则。