提交 c963a8e5 编写于 作者: W wizardforcel

ch8

上级 b358cc6b
# 八、随机性
> 原文:[Randomness](https://github.com/data-8/textbook/tree/gh-pages/chapters/08)
> 译者:[飞龙](https://github.com/wizardforcel)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
在前面的章节中,我们开发了深入描述数据所需的技能。 数据科学家也必须能够理解随机性。 例如,他们必须能够随机将个体分配到实验组和对照组,然后试图说明,观察到的两组结果之间的差异是否仅仅是由于随机分配,或真正由于实验所致。
在这一章中,我们开始分析随机性。 首先,我们将使用 Python 进行随机选择。 在`numpy`中有一个叫做`random`的子模块,它包含许多涉及随机选择的函数。 其中一个函数称为`choice`。 它从一个数组中随机选取一个项目,选择任何项目都是等可能的。 函数调用是`np.random.choice(array_name)`,其中`array_name`是要从中进行选择的数组的名称。
......@@ -50,7 +58,7 @@ True
| 等于 | `==` | `3 == 3` | `3 == 2` |
| 不等于 | `!=` | `3 != 2` | `2 != 2` |
注意比较中的两个等号`==`用于确定相等性。 这是必要的,因为 Python 已经使用`=`来表示名称的赋值,我们之前看到过。 它不能将相同的符号用于不同的目的。 因此,如果你想检查`5`是否等于`10/2`,那么你必须小心:`5 = 10/`2返回一个错误信息,因为 Python 假设你正试图将表达式`10/2`的值赋给一个名称,它是数字`5`。相反,必须使用`5 == 10/2`,其计算结果为`True`
注意比较中的两个等号`==`用于确定相等性。 这是必要的,因为 Python 已经使用`=`来表示名称的赋值,我们之前看到过。 它不能将相同的符号用于不同的目的。 因此,如果你想检查`5`是否等于`10/2`,那么你必须小心:`5 = 10/`2返回一个错误信息,因为 Python 假设你正试图将表达式`10/2`的值赋给一个名称,它是数字`5`。相反,必须使用`5 == 10/2`,其计算结果为`True`
```py
5 = 10/2
......@@ -69,7 +77,7 @@ True
True
```
两个数字的平均值总是在较小的数字和较大的数字之间。 我们用下面的数字`x``y`来表示这种关系。 可以尝试不同的`x``y`值来确认这种关系。
两个数字的平均值总是在较小的数字和较大的数字之间。 我们用下面的数字`x``y`来表示这种关系。 可以尝试不同的`x``y`值来确认这种关系。
```py
x = 12
......@@ -718,9 +726,9 @@ combined.barh(0)
## 两个事件必须同时发生时
假设有一个盒子,包含三张纸条:一张红色,一张蓝色和一张绿色。 假设你随机抽两张纸条而不放回;也就是你把三张纸条打乱,抽一张,打乱其余两张,再从这两张中抽出一张。 你先得到绿色纸条,然后是红色纸条的几率是多少?
假设有一个盒子,包含三张纸条:一张红色,一张蓝色和一张绿色。 假设你随机抽两张纸条而不放回;也就是你把三张纸条打乱,抽一张,打乱其余两张,再从这两张中抽出一张。 你先得到绿色纸条,然后是红色纸条的几率是多少?
有六种可能的颜色对:RB,BR,RG,GR,BG,GB(我们已经缩写了每种颜色的名字,就是它的第一个字母)。 所有这些都是样方案是等可能的,只有其中一个(GR)使事件发生。所以:
有六种可能的颜色对:RB,BR,RG,GR,BG,GB(我们已经缩写了每种颜色的名字,就是它的第一个字母)。 所有这些都是样方案是等可能的,只有其中一个(GR)使事件发生。所以:
![](http://latex.codecogs.com/gif.latex?%24%24%20P%28%5Cmbox%7Bgreen%20first%2C%20then%20red%7D%29%20%7E%3D%7E%20%5Cfrac%7B%5C%23%5C%7B%5Cmbox%7BGR%7D%5C%7D%7D%7B%5C%23%5C%7B%5Cmbox%7BRB%2C%20BR%2C%20RG%2C%20GR%2C%20BG%2C%20GB%7D%5C%7D%7D%20%7E%3D%7E%20%5Cfrac%7B1%7D%7B6%7D)
......@@ -838,3 +846,150 @@ results.where('Rolls', are.equal_to(50))
像这样的计算可以用来找到,随机样本中选择特定个体的几率。 准确的计算将取决于抽样方案。 但是我们上面的观察的通常可以被推广:增加随机样本的大小增加了选择个体的几率。
## 抽样
现在我们来仔细看看抽样,例子基于`top_movies.csv`数据集。
```py
top1 = Table.read_table('top_movies.csv')
top2 = top1.with_column('Row Index', np.arange(top1.num_rows))
top = top2.move_to_start('Row Index')
top.set_format(make_array(3, 4), NumberFormatter)
```
| Row Index | Title | Studio | Gross | Gross (Adjusted) | Year |
| --- | --- |
| 0 | Star Wars: The Force Awakens | Buena Vista (Disney) | 906,723,418 | 906,723,400 | 2015 |
| 1 | Avatar | Fox | 760,507,625 | 846,120,800 | 2009 |
| 2 | Titanic | Paramount | 658,672,302 | 1,178,627,900 | 1997 |
| 3 | Jurassic World | Universal | 652,270,625 | 687,728,000 | 2015 |
| 4 | Marvel's The Avengers | Buena Vista (Disney) | 623,357,910 | 668,866,600 | 2012 |
| 5 | The Dark Knight | Warner Bros. | 534,858,444 | 647,761,600 | 2008 |
| 6 | Star Wars: Episode I - The Phantom Menace | Fox | 474,544,677 | 785,715,000 | 1999 |
| 7 | Star Wars | Fox | 460,998,007 | 1,549,640,500 | 1977 |
| 8 | Avengers: Age of Ultron | Buena Vista (Disney) | 459,005,868 | 465,684,200 | 2015 |
| 9 | The Dark Knight Rises | Warner Bros. | 448,139,099 | 500,961,700 | 2012 |
(省略了 190 行)
### 对表格的行进行抽样
数据表的每一行代表一个个体;最重要的是,每个个体都是一部电影。 因此可以通过表格的行的抽样来实现对个体的抽样。
一行的内容是在同一个个体上测量的不同变量的值。 因此,行的内容的抽样形成了每个变量值的样本。
## 确定性样本
当你只是简单地指定,你要选择的集合中的哪些元素时,就不会涉及任何几率,可以创建确定性样本。
你已经做了很多次了,例如使用`take`
```py
top.take(make_array(3, 18, 100))
```
| Row Index | Title | Studio | Gross | Gross (Adjusted) | Year |
| --- | --- |
| 3 | Jurassic World | Universal | 652,270,625 | 687,728,000 | 2015 |
| 18 | Spider-Man | Sony | 403,706,375 | 604,517,300 | 2002 |
| 100 | Gone with the Wind | MGM | 198,676,459 | 1,757,788,200 | 1939 |
你也使用了`where`
```py
top.where('Title', are.containing('Harry Potter'))
```
| Row Index | Title | Studio | Gross | Gross (Adjusted) | Year |
| --- | --- |
| 22 | Harry Potter and the Deathly Hallows Part 2 | Warner Bros. | 381,011,219 | 417,512,200 | 2011 |
| 43 | Harry Potter and the Sorcerer's Stone | Warner Bros. | 317,575,550 | 486,442,900 | 2001 |
| 54 | Harry Potter and the Half-Blood Prince | Warner Bros. | 301,959,197 | 352,098,800 | 2009 |
| 59 | Harry Potter and the Order of the Phoenix | Warner Bros. | 292,004,738 | 369,250,200 | 2007 |
| 62 | Harry Potter and the Goblet of Fire | Warner Bros. | 290,013,036 | 393,024,800 | 2005 |
| 69 | Harry Potter and the Chamber of Secrets | Warner Bros. | 261,988,482 | 390,768,100 | 2002 |
| 76 | Harry Potter and the Prisoner of Azkaban | Warner Bros. | 249,541,069 | 349,598,600 | 2004 |
虽然这些是电影的样本,它们并不涉及几率。
### 概率抽样
很多数据科学都根据随机样本中的数据得到结论。 根据随机样本的正确解释分析,需要数据科学家准确地检查随机样本。
总体是从中抽取样本的所有元素的集合。
概率样本是一种样本,在抽取样本之前,可以计算出的元素的任何子集将进入样本的几率。
在概率样本中,所有的元素不需要有相同的选中几率。
### 随机抽样方案
例如,假设根据以下方案,从三个个体 A,B 和 C 组成的总体中选择两个个体:
+ 个体 A 选中概率为 1。
+ 个体 B 或 C 根据掷硬币来选择:如果硬币为正面,选择 B,否则,选择 C。
这是一个大小为 2 的概率样本。下面是所有非空子集的选中几率:
```py
A: 1
B: 1/2
C: 1/2
AB: 1/2
AC: 1/2
BC: 0
ABC: 0
```
个体 A 比 B 或 C 有更高的选中几率;的确,个体 A 肯定会被选中。由于这些差异是已知的和量化的,所以在处理样本时可以考虑这些差异。
### 系统样本
想象一下,总体的所有元素都列出在序列中。 抽样的一种方法是,先从列表中选择一个随机的位置,然后是它后面的等间隔的位置。样本由这些位置上的元素组成。这样的样本被称为系统样本。
在这里,我们将选择顶部一些行的系统样本。我们最开始随机选取前 10 行中的一行,然后我们将选取它后面的每个第 10 行。
```py
"""Choose a random start among rows 0 through 9;
then take every 10th row."""
start = np.random.choice(np.arange(10))
top.take(np.arange(start, top.num_rows, 10))
```
| Row Index | Title | Studio | Gross | Gross (Adjusted) | Year |
| --- | --- |
| 6 | Star Wars: Episode I - The Phantom Menace | Fox | 474,544,677 | 785,715,000 | 1999 |
| 16 | Iron Man 3 | Buena Vista (Disney) | 409,013,994 | 424,632,700 | 2013 |
| 26 | Spider-Man 2 | Sony | 373,585,825 | 523,381,100 | 2004 |
| 36 | Minions | Universal | 336,045,770 | 354,213,900 | 2015 |
| 46 | Iron Man 2 | Paramount | 312,433,331 | 341,908,200 | 2010 |
| 56 | The Twilight Saga: New Moon | Sum. | 296,623,634 | 338,517,700 | 2009 |
| 66 | Meet the Fockers | Universal | 279,261,160 | 384,305,300 | 2004 |
| 76 | Harry Potter and the Prisoner of Azkaban | Warner Bros. | 249,541,069 | 349,598,600 | 2004 |
| 86 | The Exorcist | Warner Bros. | 232,906,145 | 962,212,800 | 1973 |
| 96 | Back to the Future | Universal | 210,609,762 | 513,740,700 | 1985 |
(省略了 10 行)
运行单元个几次,看看输出如何变化。
这个系统样本是一个概率样本。 在这个方案中,所有的行都有机会被选中。 例如,当且仅当第 3 行被选中时,第 23 行才被选中,并且其几率是 1/10。
但并不是所有的子集都有相同的选中几率。 由于选中的行是等间隔的,大多数行的子集都没有机会被选中。 唯一可能的子集是由所有间隔为 10 的行构成的子集。任何这些子集都以 1/10 的几率被选中。 其他子集,如包含表格前 11 行的子集,选中几率都是 0。
### 放回或不放回的随机抽样
在这个课程中,我们将主要处理两个最直接的抽样方法。
首先是带放回的随机抽样,它(如我们前面所见)是`np.random.choice`从数组中抽样时的默认行为。
另一个称为“简单随机样本”,是随机抽取的样本,不带放回。在下一个个体被抽中之前,抽中的个体不会放回总体。例如,当你发牌时,就会发生这种抽样。
在下一章中,我们将使用模拟来研究带放回和不放回的大样本随机抽取。
绘制随机样本需要谨慎和精确。这不是随便的,即使这是“随机”一词的口语意义。如果你站在街头,选取前十名经过的人作为样本,你可能会认为你在随机抽样,因为你没有选择谁走过。但它不是一个随机样本 - 这是一个方便的例子。你没有提前知道每个人进入样本的概率,也许甚至你没有具体指定谁在总体中。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册