2.6 Bootstrapping算法
有时我们想要知道某个数据集的一些统计数据,但是这个数据集太大了,对它进行操作并不可行。打个比方,假设我们想知道现在世界上所有活着的人的平均身高。对于这个问题,没有一种切实可行的方法去测量每个人的身高,所以我们需要另一种方法。
通常我们会选取数据集的一部分来解答这类问题,然后对这一部分进行测量。我们可以求出几千人的身高,然后通过计算这些测量值的均值来近似求出所有人的平均身高。
我们把世界上的所有人称为总体(population)。因为人数太多,所以我们会从中归纳出一个规模合理的群体。我们希望这个群体能代表总体,故将这个较小的群体称为样本集(sample set)。样本集是在无放回的情况下构建的,因此每从总体中选择一个值并将其放入样本集,这个值在总体中就会被删除,不能再次被选择。
通过仔细认真地构建样本集,我们希望就所要度量的属性而言,这个样本集可以成为总体的合理代表。图2.15用21个元素表达了总体的概念,样本集则包含了来自总体的12个元素。
(a) (b)
图2.15 从总体中创建了一个样本集。(a)总体,在本例中,总体包含21个元素;(b)样本集,在本例中,样本集只包含12个元素
现在我们测量样本集的均值,以此作为总体均值的估计值。在这个小例子中,我们可以计算出总体的均值,大概是4.3,而样本集的均值约为3.8,这一匹配并不是很完美,但也不算是大错特错。
大多数情况下,我们无法测量总体的值(这是一开始我们构建样本集的原因),所以只能通过找到样本集的均值得到答案。但是,这个样本集表现得有多好呢?它是我们可以依赖的对总体的一个好的估量吗?很难说。
如果可以用置信区间(confidence interval)来表示结果,就更好了。虽然目前我们还没有深入讨论这个概念,但是可以对置信区间做一个表述:“我们有98%的概率确定总体的均值在3.1和4.5之间。”
要做出一个这样的表述,我们就需要知道区间的上界和下界(在这里是3.1和4.5),并衡量我们对该值存在于该区间范围内信心的大小(这里是98%)。通常,我们会为当前的任务设定一个所需的信心,然后再找到该信心所对应的范围的上下值。
Bootstrapping算法可以帮助我们找到让我们表达信心的值[Efron93] [Ong14]。我们可以像之前说的身高的例子那样利用它来讨论均值。同时,我们也可以用Bootstrapping来表示对于标准差的信心,又或者用我们感兴趣的其他统计学度量。
这个过程包括两个基本步骤:第一步是我们在图2.15中看到的那样,根据原始的总体创建一个样本集;第二步则涉及对样本集进行重采样(resampling)以生成一些新数据集,而这些新数据集中的每一个都称为bootstrap。
为了创建bootstrap,我们先要确定需要从初始样本集中选择多少元素。尽管我们通常使用较少的元素,但是理论上可以选择小于样本集数据量的任意数量的元素。然后我们会从样本集中有放回地随机抽取多个元素(在这里,我们可能会多次选择相同的元素)。这个过程如图2.16所示。
图2.16 创建bootstrap。样本集有12个元素,而每个bootstrap有5个元素,即每个bootstrap从样本集中有放回地随机选择了5个元素
抽取必须要是有放回的,因为我们可能想要构建与样本集大小相同的bootstrap。在本例中,我们可能会设定每个bootstrap中包含12个值,如果不进行有放回的抽取,那么每个bootstrap都将与样本集相同。
有了这些bootstrap,我们就可以测量它们每一个的均值。如果我们在直方图上画出这些平均值(图2.17),就会发现,如之前讨论过的那样,它们倾向于形成一个高斯分布。这个结果是自然形成的,与选择的具体值无关。就这个图来说,总体是0~1000的1000个整数,之后我们从这个数据集中随机抽取500个值来创建一个样本集,然后又创建了1000个bootstrap,每个bootstrap包含20个元素。
图2.17 直方图展示了具有给定平均值的bootstrap的数量,在490左右的蓝色竖线是样本集的均值,在500左右的红色竖线是总体的均值
既然已经知道了总体,就可以计算它的均值,大约是500。样本集的均值也非常接近总体的均值,大约是490。bootstrap则帮助我们确定:我们应该在多大程度上信任490这个值。
无须进行数学计算,bootstrap均值近似于高斯曲线,它会告诉我们需要知道的一切。假设我们想找到有着80%的置信区间,它将包含总体的均值,就只需要去掉bootstrap值中最低的和最高的10% [Brownlee17]。图2.18显示了一个方框,画出了我们认为置信区间有80%的值,其中包含已知的真实值500。可以看到,我们有80%的信心去确定总体的均值在410和560之间。
回顾一下,我们想知道一些描述总体的性质(可能是其均值或方差),假设由于某种原因,我们不能对总体进行操作,因此不能直接测量这种性质。为了得到这些值,我们通过抽取总体中的一些值形成了一个样本集,然后再从中选出一些bootstrap(每个bootstrap通过对样本集元素进行有放回的采样得到)。通过观察bootstrap的统计数据,我们就可以得到一个置信区间,从而知道我们有多大的信心去确定总体的均值是否在某个区间中。
bootstrap是很吸引人的,因为我们可以使用小型的bootstrap(每个bootstrap可能只包含10个或20个元素),这种小容量意味着对每个bootstrap程序的构建和处理都可以非常快地进行。为了弥补这种小容量的缺点,我们经常会构建数千个bootstrap。所构建的bootstrap越多,结果就越接近高斯曲线,也就越能精确地确定置信区间。
在后续章节中,我们将再次使用bootstrap的思想来从更简单的工具集合中构建强大的机器学习工具。
图2.18 我们有80%的信心去确定这个方框里包含总体的均值