From 827040e8aa2c658c4d036ea24431df0f5bdc9e06 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Sat, 30 Dec 2017 11:13:05 +0800 Subject: [PATCH] ch9 --- 9.md | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 88 insertions(+), 12 deletions(-) diff --git a/9.md b/9.md index 8908e12..709024b 100644 --- a/9.md +++ b/9.md @@ -1,5 +1,13 @@ # 九、经验分布 +> 原文:[Empirical Distributions](https://github.com/data-8/textbook/tree/gh-pages/chapters/09) + +> 译者:[飞龙](https://github.com/wizardforcel) + +> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) + +> 自豪地采用[谷歌翻译](https://translate.google.cn/) + 大部分数据科学都涉及来自大型随机样本的数据。 在本节中,我们将研究这些样本的一些属性。 我们将从一个简单的实验开始:多次掷骰子并跟踪出现的点数。 `die `表包含骰子面上的点数。 所有的数字只出现一次,因为我们假设骰子是平等的。 @@ -223,11 +231,11 @@ wheel (省略了 28 行) -您可以对轮盘赌桌上展示的几个预先指定的口袋下注。 如果你对“红色”下注,如果球落在红色的口袋里,你就赢了。 +你可以对轮盘赌桌上展示的几个预先指定的口袋下注。 如果你对“红色”下注,如果球落在红色的口袋里,你就赢了。 红色的下注返回相等的钱。 也就是说,它支付一比一。为了理解这是什么意思,假设你在“红色”下注一美元。 第一件事情发生之前,即使在车轮旋转之前,你必须交出你的一美元。 如果球落在绿色或黑色的口袋里,你就失去它了。 如果球落在红色的口袋里,你会把你的钱拿回来(让你不输不赢),再加上另外一美元的奖金。 -函数`red_winnings`以一个颜色作为参数,如果颜色是红色,则返回`1`。 对于所有其他颜色,它返回`-1`。 我们将`red_winnings`应用于`wheel`的`Color`列,来获得新的表`bets`,如果您对红色下注一美元,它显示每个口袋的净收益。 +函数`red_winnings`以一个颜色作为参数,如果颜色是红色,则返回`1`。 对于所有其他颜色,它返回`-1`。 我们将`red_winnings`应用于`wheel`的`Color`列,来获得新的表`bets`,如果你对红色下注一美元,它显示每个口袋的净收益。 ```py def red_winnings(color): @@ -271,7 +279,7 @@ one_spin | --- | --- | | 14 | red | 1 | -这轮的颜色是`Color`列中的值。 无论您的赌注如何,结果可能是红色,绿色或黑色。 要看看这些事件发生的频率,我们可以模拟许多这样的单独轮次,并绘制出我们所看到的颜色的条形图。 (我们可以称之为经验条形图。) +这轮的颜色是`Color`列中的值。 无论你的赌注如何,结果可能是红色,绿色或黑色。 要看看这些事件发生的频率,我们可以模拟许多这样的单独轮次,并绘制出我们所看到的颜色的条形图。 (我们可以称之为经验条形图。) 为了实现它,我们可以使用`for`循环。 我们在这里选择了重复 5000 次,但是当你运行这个单元格时,你可以改变它。 @@ -295,18 +303,18 @@ Table().with_column('Color', colors)\ 38 个口袋里有 18 个是红色的,每个口袋都是等可能的。 因此,在 5000 次模拟中,我们预计大致(但可能不是完全)看到`18/38*5000`或者 2,368 次红色。模拟证明了这一点。 -在模拟中,我们也记录了你的奖金。 这些经验直方图显示了,您对红色下注的不同结果的(近似)几率。 +在模拟中,我们也记录了你的奖金。 这些经验直方图显示了,你对红色下注的不同结果的(近似)几率。 ```py Table().with_column('Winnings: Red', winnings_on_red)\ .hist(bins = np.arange(-1.55, 1.65, .1)) ``` -每个模拟的唯一可能的结果是,您赢了一美元或输了一美元,这反映在直方图中。 我们也可以看到,你赢的次数要比输的次数少一点。 你喜欢这个赌博策略吗? +每个模拟的唯一可能的结果是,你赢了一美元或输了一美元,这反映在直方图中。 我们也可以看到,你赢的次数要比输的次数少一点。 你喜欢这个赌博策略吗? ### 多次游戏 -大多数轮盘赌玩家玩好几轮。 假设您在 200 次独立轮次反复下注一美元。 你总共会赚多少钱? +大多数轮盘赌玩家玩好几轮。 假设你在 200 次独立轮次反复下注一美元。 你总共会赚多少钱? 这里是一套 200 轮的模拟。 `spins`表包括所有 200 个赌注的结果。 你的净收益是`Winnings: Red`列中所有 +1 和 -1 的和。 @@ -390,7 +398,7 @@ Table().with_columns( ).hist(bins=np.arange(-200, 200, 20)) ``` -横轴上 0 的位置表明,无论您选择哪种赌注,您都更有可能赔钱而不是赚钱。在两个直方图中,不到 50% 的区域在 0 的右侧。 +横轴上 0 的位置表明,无论你选择哪种赌注,你都更有可能赔钱而不是赚钱。在两个直方图中,不到 50% 的区域在 0 的右侧。 然而,分割的赌注赚钱几率更大,赚取超过 50 美元的机会也是如此。 金色直方图有很多区域在五十美元的右侧,而蓝色直方图几乎没有。 那么你应该对分割下注吗? @@ -482,13 +490,13 @@ np.median(united.sample(1000).column('Delay')) ### 模拟统计量 -我们将使用以下步骤来模拟样本中位数。 您可以用任何其他样本量来替换 1000 的样本量,并将样本中位数替换为其他统计量。 +我们将使用以下步骤来模拟样本中位数。 你可以用任何其他样本量来替换 1000 的样本量,并将样本中位数替换为其他统计量。 第一步:生成一个统计量。 抽取大小为 1000 的随机样本,并计算样本的中位数。 注意中位数的值。 第二步:生成更多的统计值。 重复步骤 1 多次,每次重新抽样。 -第三步:结果可视化。 在第二步结束时,您将会记录许多样本中位数,每个中位数来自不同的样本。 您可以在表格中显示所有的中位数。 您也可以使用直方图来显示它们 - 这是统计量的经验直方图。 +第三步:结果可视化。 在第二步结束时,你将会记录许多样本中位数,每个中位数来自不同的样本。 你可以在表格中显示所有的中位数。 你也可以使用直方图来显示它们 - 这是统计量的经验直方图。 我们现在执行这个计划。 正如在所有的模拟中,我们首先创建一个空数组,我们在其中收集我们的结果。 @@ -558,7 +566,7 @@ Table().with_column('Sample Median', medians).hist(bins=np.arange(0.5, 5, 1)) 目标是估计数字`N`。 这是未知的参数。 -假设你观察一些飞机并记下他们的序列号。 您如何使用这些数据来猜测`N`的值? 用于估计的自然和简单的统计量,就是观察到的最大的序列号。 +假设你观察一些飞机并记下他们的序列号。 你如何使用这些数据来猜测`N`的值? 用于估计的自然和简单的统计量,就是观察到的最大的序列号。 让我们看看这个统计量如何用于估计。 但首先是另一个简化:现在一些历史学家估计,德国的飞机制造业生产了近 10 万架不同类型的战机,但在这里我们只能想象一种。 这使得假设 1 更易于证明。 @@ -593,7 +601,7 @@ serialno.sample(30).column(0).max() 与所有涉及随机抽样的代码一样,运行该单元几次;来查看变化。你会发现,即使只有 300 个观测值,最大的序列号通常在 250-300 范围内。 -原则上,最大的序列号可以像 1 那样小,如果你不幸看到了 30 次 1 号机。如果您至少观察到一次 300 号机,它可能会增大到 300。但通常情况下,它似乎处于非常高的 200 以上。看起来,如果你使用最大的观测序列号作为你对总数的估计,你不会有太大的错误。 +原则上,最大的序列号可以像 1 那样小,如果你不幸看到了 30 次 1 号机。如果你至少观察到一次 300 号机,它可能会增大到 300。但通常情况下,它似乎处于非常高的 200 以上。看起来,如果你使用最大的观测序列号作为你对总数的估计,你不会有太大的错误。 ### 模拟统计 @@ -644,7 +652,7 @@ Table().with_column('Max Serial Number', maxes).hist(bins = every_ten) ### 良好的近似 -我们前面提到过,如果生成所有可能的样本,并计算每个样本的统计量,那么您将准确了解统计量可能有多么不同。事实上,你将会完整地列举统计量的所有可能值及其所有概率。 +我们前面提到过,如果生成所有可能的样本,并计算每个样本的统计量,那么你将准确了解统计量可能有多么不同。事实上,你将会完整地列举统计量的所有可能值及其所有概率。 换句话说,你将得到统计量的概率分布和概率直方图。 @@ -661,3 +669,71 @@ Table().with_column('Max Serial Number', maxes).hist(bins = every_ten) 确实,统计量的概率分布包含比经验分布更准确的统计量信息。 但是,正如在这个例子中一样,通常经验分布所提供的近似值,足以让数据科学家了解统计量可以变化多少。 如果你有一台计算机,经验分布更容易计算。 因此,当数据科学家试图理解统计的性质时,通常使用经验分布而不是精确的概率分布。 +### 参数的不同估计 + +这里举一个例子来说明这一点。 到目前为止,我们已经使用了最大的观测序号作为飞机总数的估计。 但还有其他可能的估计,我们现在将考虑其中之一。 + +这个估计的基本思想是观察到的序列号的平均值可能在1到`N`之间。 因此,如果`A`是平均值,那么: + +![](http://latex.codecogs.com/gif.latex?A%20%7E%20%5Capprox%20%7E%20%5Cfrac%7BN%7D%7B2%7D%20%7E%7E%7E%20%5Cmbox%7Band%20so%7D%20%7E%7E%7E%20N%20%5Capprox%202A) + +因此,可以使用一个新的统计量化来估计飞机总数:取观测到的平均序列号并加倍。 + +与使用最大的观测数据相比,这种估计方法如何? 计算新统计量的概率分布并不容易。 但是和以前一样,我们可以模拟它来近似得到概率。 我们来看看基于重复抽样的统计量的经验分布。 为了便于比较,重复次数选择为 750,与之前的模拟相同。 + +```py +maxes = make_array() +twice_ave = make_array() + +for i in np.arange(repetitions): + sampled_numbers = serialno.sample(sample_size) + + new_max = sampled_numbers.column(0).max() + maxes = np.append(maxes, new_max) + + new_twice_ave = 2*np.mean(sampled_numbers.column(0)) + twice_ave = np.append(twice_ave, new_twice_ave) + + +results = Table().with_columns( + 'Repetition', np.arange(1, repetitions+1), + 'Max', maxes, + '2*Average', twice_ave +) + +results +``` + + +| Repetition | Max | 2*Average | +| --- | --- | +| 1 | 296 | 312.067 | +| 2 | 283 | 290.133 | +| 3 | 290 | 250.667 | +| 4 | 296 | 306.8 | +| 5 | 298 | 335.533 | +| 6 | 281 | 240 | +| 7 | 300 | 317.267 | +| 8 | 295 | 322.067 | +| 9 | 296 | 317.6 | +| 10 | 299 | 308.733 | + +(省略了 740 行) + +请注意,与所观察到的最大数字不同,新的估计值(“平均值的两倍”)可能会高估飞机的数量。 当观察到的序列号的平均值接近于`N`而不是`1`时,就会发生这种情况。 + +下面的直方图显示了两个估计的经验分布。 + +```py +results.drop(0).hist(bins = every_ten) +``` + +你可以看到,原有方法几乎总是低估; 形式上,我们说它是有偏差的。 但它的变异性很小,很可能接近真正的飞机总数。 + +新方法高估了它,和低估的频率一样,因此从长远来看,平均而言大致没有偏差。 然而,它比旧的估计更可变,因此容易出现较大的绝对误差。 + +这是一个偏差 - 变异性权衡的例子,在竞争性估计中并不罕见。 你决定使用哪种估计取决于对你最重要的误差种类。 就敌机而言,低估总数可能会造成严重的后果,在这种情况下,你可能会选择使用更加可变的方法,它一半几率都是高估的。 另一方面,如果高估导致了防范不存在的飞机的不必要的高成本,那么你可能会对低估的方法感到满意。 + +### 技术注解 + +事实上,“两倍均值”不是无偏的。平均而言,它正好高估了 1。例如,如果`N`等于 3,来自`1,2,3`的抽取结果的均值是`2`,`2 x 2 = 4`,它比`N`多了 1。“两倍均值”减 1 是`N`的无偏估计量。 -- GitLab