提交 827040e8 编写于 作者: W wizardforcel

ch9

上级 d9ee4d44
# 九、经验分布
> 原文:[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`的无偏估计量。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册