【发布时间】:2021-06-10 01:27:07
【问题描述】:
我正在尝试寻找/找出一个可以更新概率的函数。
假设有三个玩家,每个人从篮子里拿出一个水果:["apple", "orange", "banana"]
我将每个玩家拥有每种水果的概率存储在一个矩阵中(如这张表):
| apple | orange | banana | |
|---|---|---|---|
| Player 1 | 0.3333 | 0.3333 | 0.3333 |
| Player 2 | 0.3333 | 0.3333 | 0.3333 |
| Player 3 | 0.3333 | 0.3333 | 0.3333 |
表格可以解释为某人 (S) 的信念,他不知道谁拥有什么。每一行和每一列的总和为 1.0,因为每个玩家都有一个水果,每个水果在其中一个玩家处。
我想根据 S 获得的一些知识更新这些概率。示例信息:
玩家 1 做了 X。我们知道,如果 玩家 1 有一个苹果,他有 80% 的概率会做 X。如果他有一个橙色,则为 50%。如果他有一个香蕉,则为 10%。
这可以更简洁地写成[0.8, 0.5, 0.1],我们称之为reach_probability。
一个相当容易理解的例子是:
probabilities = [
[0.5, 0.5, 0.0],
[0.0, 0.5, 0.5],
[0.5, 0.0, 0.5],
]
# Player 1's
reach_probability = [1.0, 0.0, 1.0]
new_probabilities = [
[1.0, 0.0, 0.0],
[0.0, 1.0, 0.0],
[0.0, 0.0, 1.0],
]
上面的例子很容易理解。
另一个例子:
probabilities = [
[0.25, 0.25, 0.50],
[0.25, 0.50, 0.25],
[0.50, 0.25, 0.25],
]
# Player 1's
reach_probability = [1.0, 0.5, 0.5]
new_probabilities = [
[0.4, 0.2, 0.4],
[0.2, 0.5, 0.3],
[0.4, 0.3, 0.3],
]
在我的用例中,使用模拟不是一种选择。我的概率矩阵很大。不确定计算这个的唯一方法是使用迭代算法还是有更好的方法。
我查看了贝叶斯的东西,不知道如何在这种情况下应用它。逐行更新它然后将差异按比例分散到以前的概率似乎很有希望,但我还没有设法让它正常工作。或许这根本不可能。
【问题讨论】:
-
这是一个非常有趣的问题。我曾在贝叶斯信念网络的背景下处理过“它不是 X”形式的证据。 “它不是 X”的证据被表示为一个似然函数,对于 X 为零,对于其他任何东西都为 1。效果就像您描述的那样,概率矩阵中的某些元素被零破坏。查看您的程序,我不知道如何解决它,但是如果您考虑从 P(X, not X) 计算后验 P(not X | it is not X),您应该能够计算出正确的计算)(即,您开始时的情况)和可能性。
-
保持这些东西直截了当并不容易,尽管一旦你把它整理好,计算就很简单了。我的建议是看看贝叶斯推理和信念网络。这将是巨大的矫枉过正,但您将能够计算出此处所需的简单计算。
-
我不明白第一个例子。
[1 0 1]到达概率。所以玩家 1 可以有两个水果。但是,新矩阵的第一行是[1 0 0] -
@Damien 想象一下,我们可以问玩家 1 他会用每种水果做什么。第一个数字是当他有一个 apple 时他会做 X 的百分比,第二个是 orange...
[1, 1, 1]的意思是,例如,不管什么水果玩家 1 他会做 X 100% 的时间。 -
我不明白的是结果,即矩阵的第一行
标签: python algorithm probability bayesian