【问题标题】:Coin Toss: Frequency of trials with Expected Value out of n trials掷硬币:n 次试验中期望值的试验频率
【发布时间】:2019-10-19 12:27:54
【问题描述】:

我正在模拟 10 次抛硬币中出现反面的概率,并运行该游戏 n 次。 说

n = 100, total_tosses = n * 10 = 10000

n = 1000, total_tosses = n * 10 = 100000

n = 100000, total_tosses = n * 10 = 1000000

我知道抛硬币的期望值为 0.5

在 10 次试验中,我预计有 5/10 个反面

但是模拟 10 次试验 n 次会产生一些有趣的结果,我无法理解......

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()

# will return 1d array of 10 coin tosses in a single trial.
# = [1,0, ... 1,1] len = 10
def coin_game(num_flips):
    coin_tosses = []
    for x in range(num_flips):
        coin = np.random.randint(2)
        coin_tosses.append(coin)
    return coin_tosses

# will return 1d array with total num of tails, for each of the n trials.
# [3,5,2, ... 8,9,1] len = n
def run_sims(num_sims):
    num_tails = []
    for sim in range(num_sims):
        coin_tosses = coin_game(10)
        num_tails.append(sum(coin_tosses))
    return np.array(num_tails)

# ---Main---
num_trials = 10000
all_tails = run_sims(num_trials)
sns.countplot(all_tails)
plt.show()

为什么总试验次数与显示预期值的试验频率之间存在关系,即 5/10 次抛硬币是反面。

对于 1000 个试验:大约 250 个试验有 5/10 个尾巴

对于 10000 次试验:大约 2500 次试验有 5/10 个尾巴

对于 100000 次试验:大约 25000 次试验有 5/10 个尾巴

是什么导致了这种行为?

粗略地说,为什么 freq(5/10 tails) = n/4

【问题讨论】:

    标签: numpy simulation probability variance


    【解决方案1】:

    这只是基本概率(更具体地说是二项分布)。您有一个2^10 可能的结果,其中 252 个结果是“成功”(包含 5 个尾部)。这就是为什么您会看到大约n/4 的这些结果。

    在更一般的意义上,您可以使用以下公式解决此问题:

    其中n 是试验次数,k 是成功次数,p 是成功概率。

    对于您的问题,结果是:

    (10! / 5!(10 - 5)!) * (1 / 2)^5 * (1 - 1/2)^5 == 0.24609375
    

    【讨论】:

    • 我明白了,所以当我增加 num_trials 时,我应该预计 5/10 Tails 的试验数量约为 (0.2461) * (num_trials),这只是反映了滚动 5 的基本理论概率在一组 10 个独立的二项式试验中取得成功。谢谢!
    • 是的,完全正确。如果您增加了每次试验的掷骰数,则必须根据上述公式重新计算。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    相关资源
    最近更新 更多