抽样与经验分布
数据科学的一个重要部分是依据随机样本中的数据得出结论。为了正确解读他们的结果,数据科学家必须首先准确理解什么是随机样本。
在本章中,我们将更仔细地研究抽样,特别关注大随机样本的性质。
让我们从抽取一些样本开始。我们的示例基于 top_movies_2017.csv 数据集。
from datascience import *
path_data = '../../assets/data/'
import numpy as np
import matplotlib.pyplot as plots
plots.style.use('fivethirtyeight')
%matplotlib inline
top1 = Table.read_table(path_data + 'top_movies_2017.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 | Gone with the Wind | MGM | 198,676,459 | 1,796,176,700 | 1939
1 | Star Wars | Fox | 460,998,007 | 1,583,483,200 | 1977
2 | The Sound of Music | Fox | 158,671,368 | 1,266,072,700 | 1965
3 | E.T.: The Extra-Terrestrial | Universal | 435,110,554 | 1,261,085,000 | 1982
4 | Titanic | Paramount | 658,672,302 | 1,204,368,000 | 1997
5 | The Ten Commandments | Paramount | 65,500,000 | 1,164,590,000 | 1956
6 | Jaws | Universal | 260,000,000 | 1,138,620,700 | 1975
7 | Doctor Zhivago | MGM | 111,721,910 | 1,103,564,200 | 1965
8 | The Exorcist | Warner Brothers | 232,906,145 | 983,226,600 | 1973
9 | Snow White and the Seven Dwarves | Disney | 184,925,486 | 969,010,000 | 1937
... (190 rows omitted)抽样表格的行
数据表格的每一行代表一个个体;在 top 中,每个个体是一部电影。因此,抽样个体可以通过抽样表格的行来实现。
一行的内容是在同一个个体上测量的不同变量的值。因此,被抽样行的内容形成了每个变量值的样本。
确定性样本
当你简单地指定要选择集合中的哪些元素,而不涉及任何概率时,你创建的是一个“确定性样本”。
你已经做过很多次了,例如使用 take:
top.take(make_array(3, 18, 100))
Row Index | Title | Studio | Gross | Gross (Adjusted) | Year
3 | E.T.: The Extra-Terrestrial | Universal | 435,110,554 | 1,261,085,000 | 1982
18 | The Lion King | Buena Vista | 422,783,777 | 792,511,700 | 1994
100 | The Hunger Games | Lionsgate | 408,010,692 | 452,174,400 | 2012你也使用过 where:
top.where('Title', are.containing('Harry Potter'))
Row Index | Title | Studio | Gross | Gross (Adjusted) | Year
74 | Harry Potter and the Sorcerer's Stone | Warner Brothers | 317,575,550 | 497,066,400 | 2001
114 | Harry Potter and the Deathly Hallows Part 2 | Warner Brothers | 381,011,219 | 426,630,300 | 2011
131 | Harry Potter and the Goblet of Fire | Warner Brothers | 290,013,036 | 401,608,200 | 2005
133 | Harry Potter and the Chamber of Secrets | Warner Brothers | 261,988,482 | 399,302,200 | 2002
154 | Harry Potter and the Order of the Phoenix | Warner Brothers | 292,004,738 | 377,314,200 | 2007
175 | Harry Potter and the Half-Blood Prince | Warner Brothers | 301,959,197 | 359,788,300 | 2009
177 | Harry Potter and the Prisoner of Azkaban | Warner Brothers | 249,541,069 | 357,233,500 | 2004虽然这些是样本,但它们不是随机样本。它们不涉及随机性。
概率样本
为了描述随机样本,一些术语将很有帮助。
“总体”是从中抽取样本的所有元素的集合。
“概率样本”是指可以在抽取样本之前计算任何元素子集进入样本的概率的样本。
在概率样本中,并非所有元素被选中的概率都必须相同。
一个随机抽样方案
例如,假设你根据以下方案从由 A、B、C 三人组成的总体中选择两个人:
- 人员 A 以概率 1 被选中。
- 人员 B 或 C 之一根据抛硬币结果选择:如果硬币正面朝上,你选择 B;如果反面朝上,你选择 C。
这是一个容量为 2 的概率样本。以下是所有非空子集的入选概率:
A: 1
B: 1/2
C: 1/2
AB: 1/2
AC: 1/2
BC: 0
ABC: 0
人员 A 被选中的概率高于人员 B 或 C;实际上,人员 A 肯定会被选中。由于这些差异是已知且量化的,它们可以在处理样本时被考虑在内。
系统样本
想象总体中的所有元素按序列排列。一种抽样方法是从列表早期随机选择一个位置,然后之后每隔固定位置选择一个。样本由这些位置上的元素组成。这样的样本称为“系统样本”。
这里我们将选择 top 的行的一个系统样本。我们将首先随机选择前 10 行中的一行,然后之后每 10 行选择一行。
"""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 | Jaws | Universal | 260,000,000 | 1,138,620,700 | 1975
16 | Jurassic Park | Universal | 402,453,882 | 817,186,200 | 1993
26 | Mary Poppins | Disney | 102,272,727 | 695,036,400 | 1964
36 | Love Story | Paramount | 106,397,186 | 622,283,500 | 1970
46 | The Robe | Fox | 36,000,000 | 581,890,900 | 1953
56 | Rogue One: A Star Wars Story | Buena Vista | 532,177,324 | 537,326,000 | 2016
66 | The Dark Knight Rises | Warner Brothers | 448,139,099 | 511,902,300 | 2012
76 | Close Encounters of the Third Kind | Columbia | 132,088,635 | 494,066,600 | 1977
86 | Transformers: Revenge of the Fallen | Paramount/Dreamworks | 402,111,870 | 479,179,200 | 2009
96 | Toy Story 3 | Buena Vista | 415,004,880 | 464,074,600 | 2010
... (10 rows omitted)多次运行该单元格以查看输出如何变化。
这个系统样本是一个概率样本。在此方案中,所有行被选中的概率为 $1/10$。例如,第 23 行被选中当且仅当第 3 行被选中,其概率为 $1/10$。
但并非所有子集被选中的概率都相同。因为所选行是等间距的,大多数行的子集没有机会被选中。唯一可能的是由行间隔为 10 的整数倍组成的子集。这些子集中的任何一个被选中的概率为 1/10。其他子集,例如同时包含表格第 15 行和第 16 行的子集,或任何大小超过 10 的子集,被选中的概率为 0。
有放回或无放回地抽取随机样本
在本课程中,我们将主要处理两种最直接的抽样方法。
第一种是随机有放回抽样,正如我们之前所见,这是 np.random.choice 从数组中抽样时的默认行为。
另一种称为“简单随机样本”,是随机“无”放回地抽取的样本。在抽取下一个个体之前,被抽样的个体不会被放回总体中。例如,当你从一副牌中发一手牌时,就是这种抽样。要使用 np.random.choice 进行简单随机抽样,你必须包含参数 replace=False。
在本章中,我们将使用模拟来研究随机有放回或无放回抽取的大样本的行为。
便利样本
抽取随机样本需要谨慎和精确。它不是随随便便的,尽管这是“随机”一词的口语含义。如果你站在街角,将前十个路过的人作为你的样本,你可能认为自己是在随机抽样,因为你没有选择谁走过。但这不是一个随机样本——这是一个“便利样本”。你事先不知道每个人进入样本的概率;也许你甚至没有明确指定总体中到底有谁。