为什么贝叶斯净抽样中的随机数
Why random numbers in Bayes' Net Sampling
我正在努力研究贝叶斯网络中的采样(目前是简单的未优化先验采样)。据我了解,这个想法是生成有限数量的样本,然后查看它们如何通过网络传播。我不明白,为什么这个过程需要一个随机数生成器。
假设您有一个随机变量节点,其条件概率分布 (CPD) 如下:
| Color | P(Color) |
|------------------|
| Red | 0.1 |
| Green | 0.2 |
| Blue | 0.7 |
然后我能找到的介绍说,对于你想要采集的每个样本,你应该调用一个 random()-function 产生例如[0.0, 1.0)中的东西,然后检查,进入哪个子区间Red:[0.0, 0.1), 绿色:[0.1, 0.3) 或 蓝色:[0.3, 1.0) 下降。
我的问题是,为什么还要调用随机数生成器?毕竟,你的概率就在你面前。如果您提前决定要创建数量为 n 的样本,难道您不能让 0.1*n 样本为红色吗, 0.2*n 样本为绿色,0.7*n 样本为蓝色?对于具有 CPD 的子节点,您可以根据各自的条件概率拆分所有红色、绿色和蓝色样本,同样无需使用随机数生成器。
这仍然是一个近似值,因为您仍然没有对完整的联合概率分布进行推理。在极限情况下,这应该仍然接近 n --> infinity 的正确条件概率,不是吗?
你说得对,你不需要随机抽样。一般来说,如果图不是很大,你可以计算出精确的正确答案(例如通过变量消除)。然而,在实践中,概率模型通常非常复杂。像变量消除这样的算法对他们来说可能太慢了。抽样方法是一种近似算法的方法,它通过重复生成随机数来产生答案。考虑到您可能有很多节点和边,并且需要计算它们之间的概率以回答例如 P(Color=blue, NodeB=value1, ... 等等)。该解决方案可以是指数时间计算(取决于网络的规模)。
为什么要在抽样中生成随机数?您需要随机,因为如果样本不是随机选择的,它可能会以某种方式产生偏差。您需要确保数据代表总体,方法是通过随机数生成器。
以下是 Hernan C. Vazquez 的评论,摘自与他第一个回答相关的交流。在这次交流中,他的评论回答了我最初的问题,所以我想我会 post 他们在这里作为答案。
您需要随机,因为如果样本不是随机选择的,它可能会以某种方式存在偏差。您需要确保数据代表总体,方法是通过随机数生成器。
换句话说,你可以有正面或反面,每个 0.5。如果我想取 2 个样本 (n = 2),并且我使用 0.5 * n,那么每次出现头部或尾部时我都会得到它,以下是相反的,P (head | tail) = 1 反之亦然。这不是代表性样本,因为 P(头 | 尾)= 0.5。你正在改变游戏规则。
我正在努力研究贝叶斯网络中的采样(目前是简单的未优化先验采样)。据我了解,这个想法是生成有限数量的样本,然后查看它们如何通过网络传播。我不明白,为什么这个过程需要一个随机数生成器。
假设您有一个随机变量节点,其条件概率分布 (CPD) 如下:
| Color | P(Color) |
|------------------|
| Red | 0.1 |
| Green | 0.2 |
| Blue | 0.7 |
然后我能找到的介绍说,对于你想要采集的每个样本,你应该调用一个 random()-function 产生例如[0.0, 1.0)中的东西,然后检查,进入哪个子区间Red:[0.0, 0.1), 绿色:[0.1, 0.3) 或 蓝色:[0.3, 1.0) 下降。
我的问题是,为什么还要调用随机数生成器?毕竟,你的概率就在你面前。如果您提前决定要创建数量为 n 的样本,难道您不能让 0.1*n 样本为红色吗, 0.2*n 样本为绿色,0.7*n 样本为蓝色?对于具有 CPD 的子节点,您可以根据各自的条件概率拆分所有红色、绿色和蓝色样本,同样无需使用随机数生成器。
这仍然是一个近似值,因为您仍然没有对完整的联合概率分布进行推理。在极限情况下,这应该仍然接近 n --> infinity 的正确条件概率,不是吗?
你说得对,你不需要随机抽样。一般来说,如果图不是很大,你可以计算出精确的正确答案(例如通过变量消除)。然而,在实践中,概率模型通常非常复杂。像变量消除这样的算法对他们来说可能太慢了。抽样方法是一种近似算法的方法,它通过重复生成随机数来产生答案。考虑到您可能有很多节点和边,并且需要计算它们之间的概率以回答例如 P(Color=blue, NodeB=value1, ... 等等)。该解决方案可以是指数时间计算(取决于网络的规模)。
为什么要在抽样中生成随机数?您需要随机,因为如果样本不是随机选择的,它可能会以某种方式产生偏差。您需要确保数据代表总体,方法是通过随机数生成器。
以下是 Hernan C. Vazquez 的评论,摘自与他第一个回答相关的交流。在这次交流中,他的评论回答了我最初的问题,所以我想我会 post 他们在这里作为答案。
您需要随机,因为如果样本不是随机选择的,它可能会以某种方式存在偏差。您需要确保数据代表总体,方法是通过随机数生成器。
换句话说,你可以有正面或反面,每个 0.5。如果我想取 2 个样本 (n = 2),并且我使用 0.5 * n,那么每次出现头部或尾部时我都会得到它,以下是相反的,P (head | tail) = 1 反之亦然。这不是代表性样本,因为 P(头 | 尾)= 0.5。你正在改变游戏规则。