关于从书籍数据科学模拟中心极限定理的问题

时间:2017-10-29 07:18:54

标签: python matplotlib probability data-science

我正在读Joel Grus的书“数据科学”。我的问题特别涉及第6章,其中作者使用二项式随机变量来模拟定理。

结果将是具有二项式试验的概率分布的图表和使用正态分布的近似图。这两个图应该非常相似。这本书显示了这样一个图表: Author's Chart

他提供的代码是:

import random
from matplotlib import pyplot as plt
from collections import Counter

def bernoulli_trial(p):
    return 1 if random.random() < p else 0

def binomial(n, p):
    return sum(bernoulli_trial(p) for _ in range(n))

def make_hist(p, n, num_points):
    data = [binomial(n, p) for _ in range(num_points)]
    histogram = Counter(data)
    plt.bar([x-0.4 for x in histogram.keys()],
       [v / num_points for v in histogram.values()],
       0.8,
       color='0.75')

    mu = p * n
    sigma = math.sqrt(n * p * (1-p))

    # use a line chart to show the normal approximation
    xs = range(min(data), max(data) + 1)
    ys = [normal_cdf(i+0.5, mu, sigma) - normal_cdf(i-0.5, mu, sigma) for i in xs]
    plt.plot(xs, ys)
    plt.title('Binomial Distribution vs. Normal Approximation')
    plt.show()

make_hist(0.75, 100, 10000)

我的问题是,在这一行:     [normal_cdf(i + 0.5,mu,sigma) - xs中i的normal_cdf(i-0.5,mu,sigma)] 为什么作者使用+0.5和-0.5?有具体原因吗?

不确定是否有人遇到过这个问题。 提前谢谢!

1 个答案:

答案 0 :(得分:1)

xs变量中,您有一个步骤1的X坐标列表,例如[-5,6,7,8,9,10-]。在ys变量中,您需要获得相应的Y坐标,并且代码中的normal_cdf(i+0.5, mu, sigma) - normal_cdf(i-0.5, mu, sigma)是从i-0.5到i + 0.5的整数,即宽度为(i + 0.5) - (i-0.5) )= 1,同样的步骤。

更易理解的代码如下所示:

step = 1.0
xs = range(min(data), max(data) + 1, step)
ys = [normal_cdf(i + step / 2, mu, sigma) - normal_cdf(i - step / 2, mu, sigma) for i in xs]