Think Bayes Note 3: M&M 豆问题 |
您所在的位置:网站首页 › mm巧克力豆咋读 › Think Bayes Note 3: M&M 豆问题 |
Think Bayes Note 3: M&M 豆问题
Author: nex3z 2018-07-26 Math Bayes, Python Contents 1. 问题描述2. 推导求解3. 代码求解 1. 问题描述M&M 豆是一种混合各种颜色的巧克力豆,生产厂商会不时地调整各种颜色的巧克力豆之间的比例。1995 年之前,一袋 M&M 豆的颜色比例为:30% 褐色,20% 黄色,10% 绿色,10% 橙色,10% 黄褐色。1995 年推出了蓝色巧克力豆,此时一袋 M&M 豆的颜色比例变为:24% 蓝色,20% 绿色,16% 橙色,14% 黄色,13% 红色,13% 褐色。 假设有 1994 年和 1996 年的 M&M 豆各一袋,但不知道那一袋是哪一年的。现在从两袋中各取一个巧克力豆,发现一个是黄色,一个是绿色,求黄色豆子来自 1994 年袋子的概率。 2. 推导求解记取出黄色豆子的袋子为袋 1,另一个袋子为袋 2,假设 $H_A$ 为袋 1 是 1994 年的,袋 2 是 1996 年的;假设 $H_B$ 为袋 1 是 1996 年的,袋 2 是 1994 年的。记 D 为从两袋中各取一个巧克力豆,得到黄色和绿色豆子各一个。 可以认为 $H_A$ 和 $H_B$ 等可能,即: \begin{equation} P(H_A) = P(H_B) = 0.5 \tag{1} \end{equation} 根据问题描述可知,从 1994 年袋子中取出黄色豆子的概率为 20%,取出绿色豆子的概率为 10%;从 1995 年袋子中取出黄色豆子的概率为 14%,取出绿色豆子的概率为 20%。由此可知,如果 $H_A$ 成立,则黄色豆子来自袋 1,绿色豆子来自袋 2,其概率为 $20% \times 20% = 0.04$;同理,如果 $H_B$ 成立,则黄色豆子来自袋 2,绿色豆子来自袋 1,其概率为 $14% \times 10% = 0.014$,即: \begin{equation} P(D|H_A) = 0.04 \tag{2} \end{equation} \begin{equation} P(D|H_B) = 0.014 \tag{3} \end{equation} 由全概率公式,可得 D 发生的概率为: \begin{equation} P(D) = P(H_A)P(D|H_A) + P(H_B)P(D|H_B) = 0.5 \times 0.04 + 0.5 \times 0.014 = 0.027 \tag{4} \end{equation} 由贝叶斯公式,得黄色豆子来自 1994 年袋子的概率,即 $P(H_A|D)$ 为: \begin{equation} P(H_A|D) = \frac{P(H_A)P(D|H_A)}{P(D)} = \frac{0.5 \times 0.04}{0.027} = \frac{20}{27} \approx 0.7407 \end{equation} 3. 代码求解定义 MM 类如下: class MM(Suite): mix_94 = {'brown': 30, 'yellow': 20, 'red': 20, 'green': 10, 'orange': 10, 'tan': 10, 'blue': 0} mix_96 = {'blue': 24, 'green': 20, 'orange': 16, 'yellow': 14, 'red': 13, 'brown': 13, 'tan': 0} hypo_a = {'Bag 1': mix_94, 'Bag 2': mix_96} hypo_b = {'Bag 1': mix_96, 'Bag 2': mix_94} hypotheses = {'A': hypo_a, 'B': hypo_b} def likelihood(self, data, hypo): bag, color = data mix = self.hypotheses[hypo][bag] like = mix[color] return like其中 mix_94 和 mix_96 保存了两袋豆子中的颜色比例,hypo_a 和 hypo_b 分别对应 $H_A$ 和 $H_B$。 likelihood() 方法的 data 参数为取出豆子的袋子和豆子颜色组成的元组,如 ('Bag 1', 'yellow') 表示从袋 1 中取出了黄色豆子;hypo 参数为假设,即 A 或 B。 MM 的使用方法为: mm = MM('AB') mm.update(('Bag 1', 'yellow')) mm.update(('Bag 2', 'green')) mm.print()输出为: prob value A 0.740741 B 0.259259← Previous post Next post → |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |