gpt4 book ai didi

python - 如何更新概率矩阵

转载 作者:行者123 更新时间:2023-12-03 15:10:35 25 4
gpt4 key购买 nike

我试图找到/找出一个可以更新概率的函数。
假设有三个玩家,每个人都从篮子里拿出一个水果:["apple", "orange", "banana"]我将每个玩家拥有每种水果的概率存储在一个矩阵中(如这张表):



苹果

香蕉


玩家 1
0.3333
0.3333
0.3333

玩家 2
0.3333
0.3333
0.3333

玩家 3
0.3333
0.3333
0.3333


该表可以解释为不知道谁拥有什么的某人(S)的信念。每行和每列的总和为 1.0,因为每个玩家都有一个水果,每个水果在其中一个玩家处。
我想根据 S 获得的一些知识来更新这些概率。示例信息:
玩家 1 X。我们知道玩家 1 如果 X 有 ,则 X 的概率为 80%苹果 .如果他有 ,则为 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],
]

在我的用例中,使用模拟不是一种选择。我的概率矩阵很大。不确定计算这一点的唯一方法是使用迭代算法还是有更好的方法。
我看了贝叶斯的东西,不知道在这种情况下如何应用它。逐行更新它然后将差异按比例分布到以前的概率似乎很有希望,但我还没有设法让它正常工作。也许甚至不可能那样做。

最佳答案

初始条件:p(apple) = p(orange) = p(banana) = 1/3。
玩家 1 做了 X。我们知道,如果玩家 1 有一个苹果,他做 X 的概率为 80%。如果他有橙子,则为 50%。如果他有香蕉,则为 10%。
p(X | 苹果) = 0.8
p(x | 橙色) = 0.5
p(x | 香蕉) = 0.1
由于苹果、橙子和香蕉在 1/3 处的可能性相同,因此我们有 p(x) = 1/3 * 1.4) ~ 0.466666666。
记忆贝叶斯定理:p(a | b) = p(b|a) * p(a)/p(b)
所以 p(apple | x) = p(x | apple) * p(apple)/p(x) = 0.8 * (1/3)/0.46666666 ~ 57.14%
同样 p(orange | x) = 0.5 * (1/3)/0.46666666 ~ 35.71%
p(banana | x) = 0.1 * (1/3)/0.46666666 ~ 7.14%
以你为例:

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],
]

p(x) = 0.25 * 1.0 + 0.25 * 0.5 + 0.5 * 0.5 = 0.625
p(a|x) = p(x|a) * p(a) / p(x) = 1.0 * 0.25 / 0.625 = 0.4
p(b|x) = p(x|b) * p(b) / p(x) = 0.5 * 0.25 / 0.625 = 0.2
p(c|x) = p(x|c) * p(c) / p(x) = 0.5 * 0.50 / 0.625 = 0.4
如预期的。每列的其他条目可以缩放以获得 1.0 的列总和。
例如。在第 1 列中,我们将其他条目乘以 (1-0.4)/(1-0.25)。这需要 0.25 -> 0.2 和 0.50 -> 0.40。其他列也是如此。
new_probabilities = [
[0.4, 0.200, 0.4],
[0.2, 0.533, 0.3],
[0.4, 0.266, 0.3],
]
如果然后玩家 2 以相同的条件概率执行 y,我们得到:
p(y) = 0.2 * 1.0 + 0.533 * 0.5 + 0.3 * 0.5 = 0.6165
p(a|y) = p(y|a) * p(a) / p(y) = 1.0 * 0.2 / 0.6165 = 0.3244
p(b|y) = p(y|b) * p(b) / p(y) = 0.5 * 0.533 / 0.6165 = 0.4323
p(c|y) = p(y|c) * p(c) / p(y) = 0.5 * 0.266 / 0.6165 = 0.2157

关于python - 如何更新概率矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66592945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com