|
|
本帖最后由 b2cniloyislambd 于 2023-7-18 19:01 编辑
当与使用 Hadoop 等大规模数据分析平台的数据科学家和分析师讨论执行某些复杂建模任务的最佳方法时,有人经常会说:“我们拥有所有数据。为什么不全部使用呢?” 对于几乎每个人来说,这种评论最初听起来都是务实且合理的。毕竟,基于所有数据的模型难道不会比基于子样本的模型更好吗?好吧,也许不是——当然,这取决于当前的问题以及时间和计算限制。为了说明大型数据集带来的各种挑战,让我们使用 2009 年ASA 挑战赛中的航空公司数据集来看一些非常简单的事情。
更多的数据并没有产生明显更好的模型!我认为没有人会真正感到惊讶。我们一开始就面对一个不太好的模型。尽管如此,该示例确实提供了研究系数估计如何随样本大小变化的机会。下一张图显示了根据样本大小绘制的斜率系数,样本大小范围为 12,283 到 12,094,709 条记录。每个回归都是在随机样本上进行的,该样本比前一个样本多了约 12,000 个点。该图还以红色显示每个点的系数置信区间的标准估计。请注意,经过一些初始不稳定之后,系数估计值会稳定到接近使用所有数据获得的 beta 值。
大数据
在下图中,快速获取系数的完整数据集值的方法更加明显,该图显 购买电子邮件数据库 示了每个样本的 beta 系数的估计值与使用所有数据获得的值之间的差异。与第四个样本的最大差异为 0.07。这确实非常接近。在这种情况下,如果您认为您的样本代表了整个数据集,那么使用所有数据来评估可能的模型将是浪费时间,而且可能会适得其反。

我当然并不是说人们永远不想使用所有数据。一方面,在对模型进行评分或进行预测时,目标是对所有记录进行某些操作。此外,在更现实的建模情况下,有数千个预测变量,1.2 亿个观测值可能不足以得出任何结论。大型模型可以非常快速地消化自由度,并严重限制进行任何类型的统计推断的能力。然而,我确实想说,对于大型数据集,处理数据随机样本的能力赋予了快速检查多个模型的自由,并具有相当大的信心,结果将是对使用完整数据将获得的结果的合理估计放。
我在我的小示例中使用 Revolution Analytics RevoScaleR 包中的函数进行了随机采样和回归。最初,所有数据均从包含 FAA 数据集的 csv 文件读取为 RevoScaleR 包使用的二进制件格式。然后使用RevoScaleR的rxDataStep函数选择随机样本。该函数旨在快速操作大型数据集。下面的代码读取一条记录,绘制一个值在 1 到 9999 之间的随机数,并将其分配给变量 urns。
通过循环变量的适当值来抽取每个回归的随机样本。请注意对 R 的 runif() 函数的调用是如何在rxDataStep 的Transforms参数内发生的。在我的笔记本电脑上完成完整回归大约需要 33 秒,这使得在晚饭后几个小时内完成 1,000 次回归所需的大量计算成为可能。
我认为这次练习有以下三个主要收获:
海量数据并不一定等于“大数据”
对于探索性建模,您希望在允许快速原型设计并提供用于模型评估和可视化的统计工具的环境中工作。对于此类工作,没有比 R 更好的环境了,R 的 Revolution 分布提供了处理非常大的样本的能力。
从大数据集中抽取随机样本的能力是平衡准确性与计算约束的方法。
在我看来,在任何支持复杂分析的大规模数据平台中实现的最重要的功能是快速构建高质量随机样本的能力。
|
|