从 Python 中的频率计算条件概率

Calculating Conditional Probabilities from frequencies in Python

我正在尝试计算 P(A=a|B=b,C=c) 的条件概率,其中 a['high', 'medium', 'low'] 中的一个元素,b 是 ['0-20', '20-40', '40-60', '60-80', '80-inf'] 和 [=7= 中的一个元素] 是 ['male', 'female'].

中的一个元素

我有一本字典,其频率如下所示:

{('high', '0-20', 'female'): 11,
 ('high', '0-20', 'male'): 43,
 ('high', '20-40', 'female'): 10,
 ('high', '20-40', 'male'): 17,
 ('high', '40-60', 'female'): 11,
 ('high', '40-60', 'male'): 10,
 ('high', '60-80', 'female'): 2,
 ('high', '60-80', 'male'): 1,
 ('high', '80-inf', 'female'): 0,
 ('high', '80-inf', 'male'): 0,
 ('low', '0-20', 'female'): 130,
 ('low', '0-20', 'male'): 159,
 ('low', '20-40', 'female'): 186,
 ('low', '20-40', 'male'): 297,
 ('low', '40-60', 'female'): 71,
 ('low', '40-60', 'male'): 144,
 ('low', '60-80', 'female'): 35,
 ('low', '60-80', 'male'): 53,
 ('low', '80-inf', 'female'): 1,
 ('low', '80-inf', 'male'): 2,
 ('medium', '0-20', 'female'): 90,
 ('medium', '0-20', 'male'): 194,
 ('medium', '20-40', 'female'): 72,
 ('medium', '20-40', 'male'): 116,
 ('medium', '40-60', 'female'): 46,
 ('medium', '40-60', 'male'): 49,
 ('medium', '60-80', 'female'): 12,
 ('medium', '60-80', 'male'): 22,
 ('medium', '80-inf', 'female'): 1,
 ('medium', '80-inf', 'male'): 2}

我想要的是一本看起来像这样的字典:

{('high', '0-20', 'female'): P(A='high'| B='0-20', C='female'),
 etc...,
}

因此,如果我对您的评论理解正确,那么您遇到的问题是当有两个或更多 "conditions" 而不是一个条件时计算条件概率的概念。

自从我上次考 probability/statistics class 以来已经有一段时间了,但我认为您需要做的是将其分解为单独的问题。从数据中,您可以轻松计算出您的 P(B=b)P(C=c)。接下来你需要的是 B=bC=c 的联合概率,你也应该能够直接从数据中获得 - 例如P(high, 0-20) 只是所有满足两个条件的点的总和除以总计数。如果你把这个联合概率称为P(X),那么,根据条件概率的定义,计算P(A=a|X) = P(A=a∩X)/P(X)应该是相当简单的。

不过,重新发布或将其迁移到 Math SE 网站可能是个好主意,以获得确认 and/or 更好的答案...