从 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=b
和 C=c
的联合概率,你也应该能够直接从数据中获得 - 例如P(high, 0-20)
只是所有满足两个条件的点的总和除以总计数。如果你把这个联合概率称为P(X)
,那么,根据条件概率的定义,计算P(A=a|X) = P(A=a∩X)/P(X)应该是相当简单的。
不过,重新发布或将其迁移到 Math SE 网站可能是个好主意,以获得确认 and/or 更好的答案...
我正在尝试计算 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=b
和 C=c
的联合概率,你也应该能够直接从数据中获得 - 例如P(high, 0-20)
只是所有满足两个条件的点的总和除以总计数。如果你把这个联合概率称为P(X)
,那么,根据条件概率的定义,计算P(A=a|X) = P(A=a∩X)/P(X)应该是相当简单的。
不过,重新发布或将其迁移到 Math SE 网站可能是个好主意,以获得确认 and/or 更好的答案...